except ... as e удаляет e сам, без вашего участия
Вопрос простой на вид: «что выведет код с except Exception as e». Проверяют не знание исключений, а то, читали ли вы документацию буквально, а не по памяти из других языков.
В Python переменная, привязанная через as e, удаляется автоматически в конце блока except — как будто после него стоит del e. Это сделано намеренно: объект исключения держит ссылку на traceback, а через него — на кадры стека и локальные переменные, и без явного удаления это создавало бы циклы и держало память дольше нужного.
try: 1 / 0 except ZeroDivisionError as e: print(f"поймали: {e}") print(e)
Первый print отработает нормально. Второй упадёт с NameError: name 'e' is not defined — даже если до блока try переменной e вообще не было.
Ловушка усиливается, если нужно использовать e после блока: тогда её явно сохраняют в отдельную переменную внутри except, до выхода из блока. То же самое ломает код, если except обёрнут в условие — переменная исчезнет сразу после прохода блока, даже если условие было ложным и до исключения дело не дошло.
Знание этой детали отличает «читал туториал» от «читал PEP и документацию по try».
Тренажёр: 1900+ вопросов и задач, мок с таймером, план повторов
senior·base — что спрашивают на самом деле
В этом посте были ссылки, но мы их удалили по правилам Сетки