Что выведет код 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 ошибок.