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

Зачем raise ... from e

Вопрос

Что даёт raise ServiceError("...") from e внутри except?

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

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

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

Коротко

Правильный ответ: Кладёт исходное исключение в cause как прямую причину. from e явно связывает новое исключение с причиной, и traceback пишет «The above exception was the direct cause...».

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

  1. Подавляет исходное исключение и его traceback полностью
  2. Кладёт исходное исключение в __cause__ как прямую причинуправильный ответ
  3. Перебрасывает исходное исключение e без изменений
  4. Делает ServiceError подклассом типа исключения e

Разбор

from e явно связывает новое исключение с причиной, и traceback пишет «The above exception was the direct cause...». Без from связь тоже сохраняется, но как __context__ с текстом «During handling...». Подавляет контекст from None. Голый raise перебросил бы e, а наследование типов from не меняет.

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

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