Сообщить об ошибке.

Извлечение записей трассировки стека, модуль traceback в Python

В разделе рассмотрены функции модуля traceback, предназначенные для извлечения информации о записях трассировки стека. Приведенные ниже функции могут понадобится для ручного форматирования информации при выводе в файл или печати.

Содержание:


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()))')]