Что такое исключения? Как работает try / except / finally?

Краткий ответ (для собеседования): исключения в Python — это механизм обработки ошибок: при возникновении проблем (например, деление на ноль, отсутствие файла) выбрасывается объект‑исключение, который можно перехватить и обработать, чтобы программа не «падала». try определяет блок кода, где может возникнуть ошибка, except перехватывает и обрабатывает конкретные типы исключений, а finally выполняется всегда — и при успешном выполнении, и при ошибке, обычно для освобождения ресурсов.

Развернутое объяснение

Во время работы программы могут происходить ситуации, при которых обычное выполнение кода невозможно (деление на ноль, неверный индекс, ошибки ввода‑вывода и т.д.). Вместо немедленного «падения» Python создаёт объект‑исключение и поднимает его (raise). Если исключение не перехватить, программа завершится с ошибкой (трассировкой стека). Если перехватить — можно аккуратно обработать ошибку: вывести сообщение, вернуть заглушку, записать лог и продолжить выполнение.

Как работает try / except?

Блок try / except позволяет перехватывать и обрабатывать исключения:

try:
   result = 10 / x
except ZeroDivisionError:
   result = None
   print("Деление на ноль недопустимо")

Сначала выполняется код внутри try. Если ошибки нет — блок except пропускается. Если внутри try выброшено исключение соответствующего типа, выполнение try прерывается, и управление переходит в подходящий except. Если подходящего except нет — исключение «поднимается» дальше вверх по стеку; при отсутствии обработчика программа падает. Можно указать несколько except под разные типы ошибок или перехватывать несколько типов в одном except (Type1, Type2):.

Зачем нужен finally?

finally — это блок, который всегда выполняется после try/except: и когда всё прошло успешно, и когда произошло исключение, даже если внутри был return. Типичный пример — гарантированное освобождение ресурсов:

file = open("data.txt")
try:
   data = file.read()
except OSError:
   print("Ошибка чтения файла")
finally:
   file.close()  # выполняется всегда

Схема здесь такова:

try — «пробуем выполнить код, который может упасть»;

except — «если упал именно так — обработаем»;

finally — «в любом случае сделаем уборку: закроем файл, соединение с БД, освободим блокировку».

В современном коде освобождение ресурсов часто делегируют контекстным менеджерам (with), но понимание try / except / finally всё равно проверяют на собеседованиях.

Как ответить на собеседовании?

Исключения — это механизм обработки ошибок в Python: при проблеме поднимается объект‑исключение. Блок try определяет код, где ошибка может возникнуть, в except мы перехватываем и обрабатываем конкретные типы исключений, а finally выполняется всегда и обычно используется для очистки ресурсов — закрытия файлов, соединений и т.п.

В TeoBrain мы закрепляем это на практических задачах: от обработки ошибок ввода и деления до работы с сетью и файлами, чтобы к моменту собеседования вы умели не только объяснить конструкцию, но и применять её в реальных сценариях backend‑разработки.

Назад к списку