В разделе рассмотрены функции модуля traceback
, предназначенные для извлечения информации о записях трассировки стека. Приведенные ниже функции могут понадобится для ручного форматирования информации при выводе в файл или печати.
traceback.extract_tb()
- возвращает объект traceback.StackSummary
,traceback.extract_stack()
- извлекает необработанную трассировку из текущего кадра.traceback.extract_tb(tb, limit=None)
:Функция traceback.extract_tb()
возвращает объект traceback.StackSummary
, представляющий список "предварительно обработанных" записей трассировки стека, извлеченных из объекта трассировки tb
.
Метод traceback.extract_tb()
полезен, если необходимо как то по другому отформатировать строки трассировок стека.
Необязательный аргумент limit
имеет то же значение, что и функция traceback.print_tb()
.
"Предварительно обработанная" запись трассировки стека - это объект FrameSummary
, содержащий атрибуты filename
, lineno
, name
и line
, представляющую информацию, которая обычно печатается для трассировки стека.
Записи представляет собой строки с удаленными начальными и конечными пробелами. Если источник недоступен, то FrameSummary
будет None
.
traceback.extract_stack(f=None, limit=None)
:Функция traceback.extract_stack()
извлекает необработанную трассировку из текущего кадра стека.
Возвращаемое значение имеет тот же формат, что и для traceback.extract_tb()
.
Необязательные аргументы f
и limit
имеют то же значение, что и traceback.print_stack()
.
Демонстрация вывода функции traceback.extract_tb()
import sys, traceback def lumberjack(): bright_side_of_death() def bright_side_of_death(): return tuple()[0] try: lumberjack() except IndexError: print("*** extract_tb:") print(repr(traceback.extract_tb(exc_traceback))) # *** extract_tb: # [<FrameSummary file <test...>, line 10 in <module>>, # <FrameSummary file <test...>, line 4 in lumberjack>, # <FrameSummary file <test...>, line 7 in bright_side_of_death>]
Демонстрация вывода функции traceback.extract_stack()
>>> import traceback >>> def another_function(): ... lumberstack() ... >>> def lumberstack(): ... print(repr(traceback.extract_stack())) # [('<doctest>', 10, '<module>', 'another_function()'), # ('<doctest>', 3, 'another_function', 'lumberstack()'), # ('<doctest>', 7, 'lumberstack', 'print(repr(traceback.extract_stack()))')]