TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.4K subscribers
Post #7734 2.07K
🚨 Ловить все исключения подряд — почти всегда плохая идея

Многие пишут так:

try:
...
except (ValueError, TypeError, KeyError, NameError):
print("Что-то пошло не так")


Выглядит «надёжно». Но на практике такой код часто прячет реальные баги и усложняет отладку.

Допустим, вы читаете CSV с датами и хотите обработать ошибки:

try:
start = parse_date(row["start"])
end = parse_date(row["end"])
except (ValueError, TypeError, KeyError, NameError):
print("Некорректная дата")


На первый взгляд — всё ок. Но проблема в деталях.

1. NameError здесь вообще лишний

NameError обычно означает баг в коде.

Например, вы случайно написали:

star_date


вместо

start_date


Если ловить NameError, программа просто проглотит ошибку — и вы даже не заметите, что сломали код.
Иногда traceback — это полезно.

2. ValueError — логичная ошибка

Если в CSV дата битая:

2026-00-01


то datetime честно скажет:

ValueError


Это уже ошибка данных пользователя — её как раз нормально обрабатывать.

3. TypeError — тоже может быть валидным кейсом

Например, если дата отсутствует:

name,start,end
Q1,2025-01-01,


Тут программа получает None вместо даты. Это проблема входных данных, а не вашего кода — обработать её можно.

4. KeyError — не всегда стоит ловить

Если пользователь ошибся в заголовке:

name,Start,end


(большая S вместо маленькой)

код выдаст:

KeyError: 'start'


И это… полезная ошибка.

Если вы её поймаете и покажете:
> Invalid date on line 1

пользователь вообще не поймёт, что проблема в заголовке.

Лучше проверить headers заранее:

required = ["name", "start", "end"]

for col in required:
if col not in reader.fieldnames:
print(f"Missing column: {col}")
sys.exit(1)


Когда except Exception всё-таки нормален

Есть исключение из правила: mission-critical код. Например, вы обрабатываете 1000 файлов и не хотите, чтобы один битый файл остановил весь процесс.

Тогда такой код оправдан:

for path in files:
try:
process(path)
except Exception as e:
log_error(path, e)


Один файл упал → идём дальше. Главное — логировать ошибку, а не silently ignore.

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст
  • ❤ 4
  • 👍 1
  • 🤩 1
More from @pyproglib
  1. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
  2. Sep 19, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  3. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  4. Sep 15, 2026⏱️ Справочник по Big-O в Python Для тех, кто хочет писать не просто работающий, а эффектив…
  5. Sep 14, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
  6. Sep 13, 2026🌸 Вселенная намекает: пора уже начать этот курс С 14 сентября цены в Proglib Academy выра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →