Выбор ответа Middle Исключения и контекстные менеджеры обновлено
Зачем raise ... from e
Вопрос
Что даёт raise ServiceError("...") from e внутри except?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Кладёт исходное исключение в cause как прямую причину. from e явно связывает новое исключение с причиной, и traceback пишет «The above exception was the direct cause...».
Варианты ответа
- Подавляет исходное исключение и его traceback полностью
- Кладёт исходное исключение в
__cause__как прямую причинуправильный ответ - Перебрасывает исходное исключение
eбез изменений - Делает
ServiceErrorподклассом типа исключенияe
Разбор
from e явно связывает новое исключение с причиной, и traceback пишет «The above exception was the direct cause...». Без from связь тоже сохраняется, но как __context__ с текстом «During handling...». Подавляет контекст from None. Голый raise перебросил бы e, а наследование типов from не меняет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.