Ошибки и отладка

Обработка исключений через try-except

Содержание курса

В прошлом уроке мы научились читать traceback: находить строку с ошибкой, определять её тип и понимать, что пошло не так. Теперь следующий шаг — не просто читать ошибку, а перехватывать её прямо во время выполнения, чтобы программа не падала.

Зачем нужна обработка исключений: идея try-except

Когда Python встречает операцию, которую не может выполнить — например, деление на ноль или преобразование строки в число — он генерирует исключение. Если это исключение никто не обрабатывает, интерпретатор останавливает программу и печатает traceback. Для скрипта, который запускают один раз и смотрят глазами, это терпимо. Для программы, которая взаимодействует с пользователем или обрабатывает внешние данные, — катастрофа: одна неожиданная строка ввода роняет всё.

Конструкция try-except решает эту проблему. Идея простая: ты заранее говоришь Python, что определённый кусок кода может упасть, и указываешь, что делать в этом случае.

Структурно это выглядит так:

try:
    # код, который может вызвать исключение
except ТипИсключения:
    # что делать, если исключение возникло

Поток управления здесь работает строго:

  1. Python начинает выполнять инструкции внутри try — по одной, сверху вниз.

  2. Как только одна из них вызывает исключение — выполнение try немедленно прерывается. Всё, что было после проблемной строки внутри try, не выполняется.

  3. Управление переходит в блок except, и Python выполняет то, что там написано.

  4. После except программа продолжает работу в обычном режиме — она не падает.

Если же внутри try всё прошло без исключений, блок except просто пропускается.

Важно понять: try и except — это не два независимых инструмента, а одна конструкция. try без except — синтаксическая ошибка. Они всегда работают в паре: первый определяет зону риска, второй — запасной выход.

Обрати внимание: после except рекомендуется указывать конкретный тип исключения — ValueError, ZeroDivisionError и так далее. Почему это важно — разберём в следующей секции. Пока запомни саму механику: при ошибке внутри try Python немедленно переходит в except и продолжает работу после блока, не роняя программу.