В ноутбуке аналитик написал except Exception: pass, чтобы код «не падал». Почему это считается плохой практикой, если цель — быстро находить и исправлять проблемы?
AПотому что инструкция
pass замедляет работу интерпретатора и заметно увеличивает общее время выполнения ноутбука на больших данных.BПотому что
except Exception: ловит только KeyError, а остальные исключения вроде ValueError всё равно прервут выполнение ячейки.CПотому что такая конструкция запрещена синтаксисом Python:
pass нельзя использовать в качестве тела блока except без других инструкций.DПотому что ошибки молча скрываются: данные могут стать неверными, а трассировка и первопричина проблемы теряются для последующей отладки.
Правильный ответ. Широкий перехват с молчаливым
pass скрывает реальные ошибки, ломает отладку и приводит к тихим дефектам в данных.Разбор
Задача обработки исключений — не «чтобы не падало», а чтобы поведение оставалось корректным и диагностируемым. except Exception: pass превращает реальные ошибки в тихие дефекты: метрики могут считаться неправильно, и вы не узнаете почему. Лучше ловить конкретные исключения и явно решать, что делать: записать в лог, поставить None, прекратить выполнение или поднять исключение через raise. Это сохраняет трассировку и помогает быстро найти первопричину.
Проверь себя · 1/3разбор после ответа
Вы поймали ошибку, залогировали её и хотите пробросить дальше, чтобы пайплайн упал и трейс сохранился. Что нужно сделать внутри
except?Ещё вопросы по теме «Исключения и отладка»
- В обработчике данных используется конструкция `try`/`except`/`finally`. Внутри `try` произошла ошибка, она поймана в `except`. Что произойдёт с кодом в блоке `finally`?
- Вы парсите событие в словарь `event`. Что произойдёт при обращении `event['currency']`, если ключа `currency` в словаре нет?
- В отчёте вы считаете сумму и случайно складываете число и строку: `total + "10"`. Какое исключение наиболее вероятно?
- Скрипт получает список строк, но иногда он короче ожидаемого. Что произойдёт при обращении `rows[3]`, если в списке всего 3 элемента?
- Вы пишете функцию, которая внутри `try` делает `return`, а в `finally` закрывает ресурс (например, файл или соединение). Что произойдёт с кодом в `finally` при `return` из `try`?
- Все вопросы по «Исключения и отладка» →