Что выведет код Middle Исключения и контекстные менеджеры обновлено
Причина и контекст исключения
Вопрос
Что выведет код? По строке на каждый print.
def load():
try:
{}['k']
except KeyError as e:
raise RuntimeError('нет ключа') from e
try:
load()
except RuntimeError as err:
print(type(err.__cause__).__name__)
print(err.__suppress_context__)
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: KeyError, True. raise ... from e записывает причину в cause и ставит suppresscontext = True, чтобы traceback показал именно прямую причину, а не «during handling».
Что выведет
KeyError
True
Разбор
raise ... from e записывает причину в __cause__ и ставит __suppress_context__ = True, чтобы traceback показал именно прямую причину, а не «during handling». Контекст (__context__) при этом тоже указывает на KeyError.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.