Исключения распространяются по стеку до подходящего обработчика, выполняя необходимые finally. except Exception опасен не сам по себе, а когда скрывает неожиданные ошибки и продолжает работу.
Как устроен под капотом механизм исключений в Python? Почему использование конструкции except Exception считается антипаттерном в продакшене и какие критические системные исключения она может случайно перехватить?
Исключения распространяются по стеку до подходящего обработчика, выполняя необходимые finally. except Exception опасен не сам по себе, а когда скрывает неожиданные ошибки и продолжает работу.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Исключения распространяются по стеку до подходящего обработчика, выполняя необходимые finally. except Exception опасен не сам по себе, а когда скрывает неожиданные ошибки и продолжает работу.
Обрабатывайте ожидаемый сбой узко, например ошибку конкретной внешней операции. На верхней границе запроса широкий перехват может быть оправдан для отчёта об ошибке и контролируемого завершения. MemoryError и RecursionError входят в Exception, но KeyboardInterrupt, SystemExit и GeneratorExit — нет. Голый except: или except BaseException охватывает значительно больше. Нельзя считать запись ошибки в лог полноценным восстановлением согласованности после любого исключения.