Почему "except: pass" – плохая практика в Python?

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Использование except: pass в программировании сравнимо со скрытием пыли под ковром. Для качественной отладки требуется грамотное управление исключениями: предвидеть и устранять ожидаемые ошибки, не позволяя неожиданным оставаться без внимания.

Python
Скопировать код
try:
    do_something_mighty()
except ExpectedButUnpleasantError:
    handle_it_like_a_pro()
except Exception as surprising_exception:
    log_the_unpredicted_guest(surprising_exception)  # Гораздо безопаснее, чем игнорирование
Кинга Идем в IT: пошаговый план для смены профессии

Проходя сквозь лабиринт исключений

Программирование — это общение с компьютером, а исключения — его ответы. Они похожи на крики о помощи в молчании исполнения кода. Ваша задача — стать мастером обработки исключений, способным справиться с возникшими препятствиями.

Выбирайте свои баталии с умом

Применение except: pass соответствует попытке умолчать о проблемах в коде. Это чрезмерно защищает код, позволяя даже серьезным ошибкам пройти мимо. Процесс перехвата исключений должен быть обдуманным: концентрируйтесь на тех, что можно эффективно обработать.

Управляйте блоками обработки исключений аккуратно

Относитесь к созданию блоков обработки исключений так же ответственно и внимательно, как к воспитанию детей:

Python
Скопировать код
try:
    walk_on_fire()
except HotFeetError:
    quench_my_heat()  # Был готов к HotFeetError и остыл
except ScorchedEarthError as Armageddon:
    handle_nuclear_fallout(Armageddon)  # Перехватываю исключительно ScorchedEarthError
except Exception as unexpected_exception:
    log_and_shout(unexpected_exception)
    raise  # Потому что ошибка, подобно зомби, любит скрыться и жаждет внимания

Уважайте свой код

Фиксация и повторное возбуждение исключений: выявляйте беспорядок и оставляйте подсказки для последующего анализа. except: pass — это камень преткновения, о котором ваш код споткнется, потеряет данные и причинит повреждение оперативной памяти.

Ситуации, где можно забить релизраство

Есть ситуации, подобные лунным кратерам, где ошибки можно игнорировать без урона. Незначительные недоработки, которые не будут нарушать спокойствие вашего вывода. Но не забывайте отмечать эти места знаком предупреждения для коллег-разработчиков.

Визуализация

Блиц-тест: Почему "except: pass" плохо?

Ваш код — ниндзя, а исключения — заградительное орудие перед ним.

Ниндзя с except: pass:

Python
Скопировать код
try:
    ninja_route()
except:
    pass  # Неожиданное препятствие, но решено игнорировать.
ПрепятствиеДействие ниндзя
Ядовитая стрела🥷 Проходит мимо
Взрывная ловушка🥷 Идёт дальше
Смертельный самурай🥷 Только вздыхает и продолжает

Результат: Ваш ниндзя не пережил конфликт. 👻

Теперь дадим ниндзе возможность умелой обработки исключений:

Python
Скопировать код
try:
    ninja_route()
except ShurikenError as se:
    dodge(se)  # Ниндзя избегает с близкой скоростью.
ПрепятствиеДействие ниндзя
Ядовитая стрела🥷 Избегает контакта
Взрывная ловушка🥷 Находит обход
Смертельный самурай🥷 Приступает к дуэли

Результат: Миссия выполнена незаметно и безопасно. 🥷

Разгадывание сети исключений

Посмотри перед скачком

Список исключений Python – не просто страшный фильм ужасов. Это ключ к пониманию, какие исключения стоит перехватывать. Перехват BaseException – как паранойя от каждого шороха: слишком всеохватно.

Придерживайся Дзен

Разработчики Python оставили нам Дзен Python, который подсказывает: "Ошибки не должны проходить незамеченными". Прислушайтесь к этому совету — ошибки — это ваша отладочная "канарейка в шахте".

Звук разрушения

Это случилось! Ваш код падает из-за игнорированных исключений. Молча, они вспыхивают, превращая ценные данные в хаос непонятных символов.

Монахи код-ревью говорят: Стремитесь к совершенству

Работая над улучшением — вы двигаетесь вперёд. Относитесь к своему коду как к утренней медитации: "Что я могу улучшить?". Переосмыслите, усовершенствуйте, повторите. И не забывайте обновлять свои методы обработки исключений.

Полезные материалы

  1. 8. Ошибки и исключения — Документация Python 3.12.1
  2. Исключения Python: Введение – Real Python
  3. Обработка исключений – Python Wiki
  4. PEP 8 – Стандарт оформления кода на Python | peps.python.org
  5. Прагматичный программист (юбилейное издание): Ваш путь к мастерству, Дэвид Томас, Эндрю Хант
  6. Является ли использование исключений для управления потоком оптимальной практикой в Python? – Software Engineering Stack Exchange