Обработка исключений через try-except
Содержание курса
Процедура написания try-except: пошаговый алгоритм
Концепции разобраны, примеры показаны — теперь зафиксируем, как именно действовать, когда садишься писать try-except с нуля.
Шаг 1. Найди опасное место
Сначала спроси себя: какая конкретная строка может вызвать исключение? Это не всегда очевидно, но обычно подозреваемые — это:
- вызов
int()илиfloat()на пользовательском вводе; - деление, где знаменатель может оказаться нулём;
- обращение к внешним данным, формат которых заранее неизвестен.
Найди именно эту строку — не функцию целиком, не блок из десяти строк, а конкретную операцию.
Шаг 2. Оберни минимальный код в try
Поместить в try нужно ровно столько, сколько необходимо — только те строки, которые сами могут бросить исключение. Если опасные строки — это int(input(...)) и деление, то в try идут именно они:
try:
n = int(input("Введите делитель: "))
result = 100 / n
Здесь ровно две строки: первая может дать ValueError, вторая — ZeroDivisionError. print с результатом выносим наружу — он безопасен и не должен находиться под защитой.
Шаг 3. Напиши except с конкретным типом
После try — один или несколько блоков except, каждый с конкретным типом:
except ValueError:
print("Ошибка: введите целое число")
except ZeroDivisionError:
print("Ошибка: делитель не может быть нулём")
Каждое сообщение объясняет именно ту ситуацию, которую перехватывает. Пользователь видит понятный текст, а не Python traceback.
Шаг 4. Убедись, что код после блока продолжает работу
Поставь после всей конструкции строку, которая должна выполниться в любом случае — и проверь, что она действительно выполняется при обоих исходах:
result = None
try:
n = int(input("Введите делитель: "))
result = 100 / n
except ValueError:
print("Ошибка: введите целое число")
except ZeroDivisionError:
print("Ошибка: делитель не может быть нулём")
if result is not None:
print("Результат:", result)
print("Готово") # выполняется всегда
Запусти программу дважды: один раз введи нормальное число, второй — что-нибудь неправильное. В обоих случаях print("Готово") должен появиться в выводе. Если не появляется — где-то внутри try осталось необработанное исключение другого типа.
Шаг 5. Перечитай try и убедись, что он не раздулся
Это финальная проверка: пройдись по строкам внутри try и спроси себя, может ли каждая из них вызвать исключение того типа, который ты обрабатываешь. Если какие-то строки там явно безопасны и не зависят от опасной операции — вынеси их наружу. Чем уже try, тем точнее ты понимаешь, что именно поймал в except.
