except Exception
Анти-паттерн
Не рекомендуется использовать базовое исключение Exception вместо того, чтобы избирательно и целенаправленно отлавливать и обрабатывать ошибки.
Как максимум, оно может быть использовано в дополнение к ожидаемым исключениям.
Бывают ситуации, когда могут возникнуть неожиданные исключения, и тогда в завершающем except можно ловить Exception.
Пример¶
Если ловятся исключения, не связанные с основной идеей защищаемого участка кода, непредвиденные ситуации могут случайно быть подавлены, а программа продолжит работу в некорректном состоянии.
Плохо:
try:
do_something()
except Exception:
logging.error('Произошла ошибка')
Допустимо:
try:
do_something()
except FileNotFoundError:
logging.error('Файл не найден!')
except PermissionError:
logging.error('Нет прав доступа к файлу!')
except Exception as e:
logging.error(f'Произошла ошибка: {e}.')
Хорошо:
try:
do_something()
except FileNotFoundError:
logging.error('Файл не найден!')
except PermissionError:
logging.error('Нет прав доступа к файлу!')