Развернутое объяснение
Во время работы программы могут происходить ситуации, при которых обычное выполнение кода невозможно (деление на ноль, неверный индекс, ошибки ввода‑вывода и т.д.). Вместо немедленного «падения» 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‑разработки.