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

Обработка исключений через 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.