Python try except для контролируемой обработки ошибок

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

Пример Python Try Except Для Обработки Ошибок

Вывод:

Результат появится здесь...

Вывод:

0

Как Работает Этот Пример

  • Блок try пытается преобразовать текст в целое число.
  • Когда int() падает, блок except ValueError задаёт запасное значение.
  • print выполняется после блока, поэтому скрипт всегда выводит полезное число.
  • Вывод показывает путь с запасным значением, что доказывает обработку ошибки вместо падения.

Частые ошибки с Python try except

Ошибка 1: Ловить всё подряд с пустым except.

try:
    total = int(text)
except:
    total = 0
try:
    total = int(text)
except ValueError:
    total = 0

Почему это происходит: пустой except ловит системные ошибки вроде KeyboardInterrupt и SystemExit, делая программу сложнее остановить и отлаживать. Предпочитайте конкретное исключение, которое вы ожидаете.

Ошибка 2: Класть слишком много кода в try и скрывать не связанные ошибки.

total = 10

try:
    count = int(text)
    ratio = total / count
except Exception:
    ratio = 0
total = 10

try:
    count = int(text)
except ValueError:
    ratio = 0
else:
    ratio = total / count

Почему это происходит: широкие обработчики могут скрывать ошибки в строках, которые должны падать явно. Блок else выполняется только если исключения не было, поэтому неожиданные баги не проглатываются.

Ошибка 3: Располагать блоки except от общего к частному.

try:
    count = int(text)
except Exception:
    count = 0
except ValueError:
    count = 0
try:
    count = int(text)
except ValueError:
    count = 0
except Exception:
    count = 0

Почему это происходит: Python выбирает первый подходящий обработчик, поэтому широкий except сверху делает специфический блок недостижимым.

Соображения По Производительности

try без исключений работает эффективно, но выбрасывать и ловить исключения относительно дорого. Если ошибки ожидаемы как часть нормального потока, простая предварительная проверка (например, валидация ввода) может быть быстрее и понятнее. Когда ошибки действительно редкие, try и except сохраняют читаемость основного пути без заметных затрат.

Когда использовать try except

  • Используйте, когда операция может завершиться ошибкой и есть безопасный запасной вариант (парсинг текста, чтение файла, вызов API).
  • Используйте, чтобы продолжать пакетную обработку, пропуская плохие элементы и логируя ошибку.
  • Делайте try максимально узким, чтобы защищать только рискованную строку и не скрывать другие ошибки.
  • Избегайте, если сбой — нормальный путь и простое условие дешевле и яснее.
  • Избегайте ловить BaseException или общий Exception, если только вы не пробрасываете или не логируете с намерением.