Выбор ответа Senior Исключения и контекстные менеджеры обновлено

raise против raise e

Вопрос

Чем голый raise внутри except Exception as e отличается от raise e?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: raise бросает как есть, raise e добавляет строку броска в traceback. Оба варианта бросают тот же объект.

Варианты ответа

  1. raise бросает как есть, raise e добавляет строку броска в tracebackправильный ответ
  2. Разницы нет никакой, оба варианта дают одинаковый traceback
  3. raise e создаёт копию исключения, а голый raise бросает сам оригинал
  4. Голый raise разрешён только в finally, а не в except

Разбор

Оба варианта бросают тот же объект. Но raise e записывает в traceback строку повторного броска, и при чтении лога кажется, что ошибка возникла в обработчике. Голый raise сохраняет исходную картину и короче. Копий исключений не создаётся, а голый raise работает внутри except (вне активного исключения он даёт RuntimeError).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.