все 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Сообщить о неточности