Python 3.5+tracebackпонятие
traceback.TracebackException
снимок исключения
Снимок исключения, готовый к печати: тип, сообщение, стек и цепочка __cause__/__context__ — без ссылок на кадры и их переменные.
Синтаксис
te = traceback.TracebackException.from_exception(exc, *, limit=None, capture_locals=False)
Хранить само исключение долго дорого: e.__traceback__ держит все кадры, а с ними все локальные переменные — большие списки, открытые файлы. TracebackException.from_exception(e) сразу снимает всё нужное для печати, и исключение можно отпустить. format() возвращает генератор строк, а не строку — склеивайте ''.join(...). С capture_locals=True в снимок попадает repr локальных переменных каждого кадра; метод print(file=...) появился в Python 3.11.
Примеры
import traceback
try:
int('x')
except ValueError as e:
te = traceback.TracebackException.from_exception(e)
print(''.join(te.format_exception_only()), end='')
# → ValueError: invalid literal for int() with base 10: 'x'
print(te.stack[-1].name) # → <module>
print(next(te.format()), end='') # → Traceback (most recent call last):
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности