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, если только вы не пробрасываете или не логируете с намерением.