Обработка исключений через try-except
Содержание курса
В прошлом уроке мы научились читать traceback: находить строку с ошибкой, определять её тип и понимать, что пошло не так. Теперь следующий шаг — не просто читать ошибку, а перехватывать её прямо во время выполнения, чтобы программа не падала.
Зачем нужна обработка исключений: идея try-except
Когда Python встречает операцию, которую не может выполнить — например, деление на ноль или преобразование строки в число — он генерирует исключение. Если это исключение никто не обрабатывает, интерпретатор останавливает программу и печатает traceback. Для скрипта, который запускают один раз и смотрят глазами, это терпимо. Для программы, которая взаимодействует с пользователем или обрабатывает внешние данные, — катастрофа: одна неожиданная строка ввода роняет всё.
Конструкция try-except решает эту проблему. Идея простая: ты заранее говоришь Python, что определённый кусок кода может упасть, и указываешь, что делать в этом случае.
Структурно это выглядит так:
try:
# код, который может вызвать исключение
except ТипИсключения:
# что делать, если исключение возникло
Поток управления здесь работает строго:
Python начинает выполнять инструкции внутри
try— по одной, сверху вниз.Как только одна из них вызывает исключение — выполнение
tryнемедленно прерывается. Всё, что было после проблемной строки внутриtry, не выполняется.Управление переходит в блок
except, и Python выполняет то, что там написано.После
exceptпрограмма продолжает работу в обычном режиме — она не падает.
Если же внутри try всё прошло без исключений, блок except просто пропускается.
Важно понять: try и except — это не два независимых инструмента, а одна конструкция. try без except — синтаксическая ошибка. Они всегда работают в паре: первый определяет зону риска, второй — запасной выход.
Обрати внимание: после except рекомендуется указывать конкретный тип исключения — ValueError, ZeroDivisionError и так далее. Почему это важно — разберём в следующей секции. Пока запомни саму механику: при ошибке внутри try Python немедленно переходит в except и продолжает работу после блока, не роняя программу.
