Python Glossary English

все Python 3inspectфункция

inspect.getinnerframes()

стек и кадры

Список FrameInfo по объекту трассировки: от кадра, где исключение поймано, до кадра, где оно возбуждено.

Синтаксис

inspect.getinnerframes(traceback, context=1) -> list[FrameInfo]

Принимает traceback (e.__traceback__), а не само исключение, поэтому работает и после выхода из except — в отличие от inspect.trace(). Значит, исключение, сохранённое в переменной, через трассировку держит все кадры и их локальные переменные: в долгоживущих структурах храните текст (traceback.format_exception), а не объект. Через fi.frame.f_locals видно значения переменных в момент ошибки — то, чего нет в обычной трассировке.

Примеры

import inspect
def parse(text):
    value = text.strip()
    return int(value)
try:
    parse(' x ')
except ValueError as e:
    err = e
frames = inspect.getinnerframes(err.__traceback__, 0)
print([fi.function for fi in frames])  # → ['<module>', 'parse']
print(frames[-1].frame.f_locals['value'])  # → x
del frames, err  # иначе кадры живут вместе с исключением

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности