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