traceback.md
1> **Источник:** https://python-all.ru/3.11/library/traceback.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`traceback`](https://python-all.ru/3.11/library/traceback.html#module-traceback) – печать или получение трассировки стека89**Исходный код:** [Lib/traceback.py](https://python-all.ru/src/3.11/Lib/traceback.py)1011---1213Этот модуль предоставляет стандартный интерфейс для извлечения, форматирования и печати трассировок стека программ Python. Он в точности повторяет поведение интерпретатора Python при печати трассировки стека. Это полезно, когда требуется печатать трассировки стека программно, например, в «обёртке» вокруг интерпретатора.1415Модуль использует [объекты traceback](https://python-all.ru/3.11/reference/datamodel.html#traceback-objects) – это объекты типа [`types.TracebackType`](https://python-all.ru/3.11/library/types.html#types.TracebackType), которые присваиваются полю [`__traceback__`](https://python-all.ru/3.11/library/exceptions.html#BaseException.__traceback__) экземпляров [`BaseException`](https://python-all.ru/3.11/library/exceptions.html#BaseException).1617> **См. также**18>19> **Модуль [`faulthandler`](https://python-all.ru/3.11/library/faulthandler.html#module-faulthandler)**20>21> Используется для явного дампа трассировок Python при сбое, по таймауту или по сигналу пользователя.22>23> **Модуль [`pdb`](https://python-all.ru/3.11/library/pdb.html#module-pdb)**24>25> Интерактивный отладчик исходного кода для программ на Python.2627Модуль определяет следующие функции:2829#### `traceback.print_tb(tb, limit=None, file=None)`3031Выводит до *limit* записей трассировки стека из [объекта traceback](https://python-all.ru/3.11/reference/datamodel.html#traceback-objects) *tb* (начиная с фрейма вызывающего), если *limit* положителен. В противном случае выводит последние `abs(limit)` записей. Если *limit* опущен или равен `None`, выводятся все записи. Если *file* опущен или равен `None`, вывод направляется в [`sys.stderr`](https://python-all.ru/3.11/library/sys.html#sys.stderr); в противном случае он должен быть открытым [файлом](https://python-all.ru/3.11/glossary.html#term-file-object) или [объектом, подобным файлу](https://python-all.ru/3.11/glossary.html#term-file-like-object), для получения вывода.3233Изменено в версии 3.5: Добавлена поддержка отрицательного значения *limit*.3435#### `traceback.print_exception(exc, /, [value, tb, ]limit=None, file=None, chain=True)`3637Выводит информацию об исключении и записи трассировки стека из [объекта traceback](https://python-all.ru/3.11/reference/datamodel.html#traceback-objects) *tb* в *file*. Отличается от [`print_tb()`](https://python-all.ru/3.11/library/traceback.html#traceback.print_tb) следующим:3839- если *tb* не равен `None`, выводится заголовок `Traceback (most recent call last):`40- он выводит тип исключения и *value* после трассировки стека4142- если *type(value)* равен [`SyntaxError`](https://python-all.ru/3.11/library/exceptions.html#SyntaxError) и *value* имеет соответствующий формат, выводится строка, в которой произошла синтаксическая ошибка, с символом «^», указывающим приблизительную позицию ошибки.4344Начиная с Python 3.10, вместо передачи *value* и *tb* первым аргументом можно передавать объект исключения. Если *value* и *tb* указаны, первый аргумент игнорируется для обеспечения обратной совместимости.4546Необязательный аргумент *limit* имеет тот же смысл, что и для [`print_tb()`](https://python-all.ru/3.11/library/traceback.html#traceback.print_tb). Если *chain* равен true (по умолчанию), то также выводятся связанные исключения (атрибуты [`__cause__`](https://python-all.ru/3.11/library/exceptions.html#BaseException.__cause__) или [`__context__`](https://python-all.ru/3.11/library/exceptions.html#BaseException.__context__) исключения), как это делает сам интерпретатор при выводе необработанного исключения.4748Изменено в версии 3.5: Аргумент *etype* игнорируется и определяется по типу *value*.4950Изменено в версии 3.10: Параметр *etype* переименован в *exc* и теперь является только позиционным.5152#### `traceback.print_exc(limit=None, file=None, chain=True)`5354Это сокращение для `print_exception(sys.exception(), limit, file, chain)`.5556#### `traceback.print_last(limit=None, file=None, chain=True)`5758Это сокращение для `print_exception(sys.last_type, sys.last_value, sys.last_traceback, limit, file, chain)`. В общем случае оно будет работать только после того, как исключение достигнет интерактивного приглашения (см. [`sys.last_type`](https://python-all.ru/3.11/library/sys.html#sys.last_type)).5960#### `traceback.print_stack(f=None, limit=None, file=None)`6162Выводит до *limit* записей трассировки стека (начиная с точки вызова), если *limit* положителен. В противном случае выводит последние `abs(limit)` записей. Если *limit* опущен или равен `None`, выводятся все записи. Необязательный аргумент *f* можно использовать для указания альтернативного [фрейма стека](https://python-all.ru/3.11/reference/datamodel.html#frame-objects), с которого начинать. Необязательный аргумент *file* имеет тот же смысл, что и для [`print_tb()`](https://python-all.ru/3.11/library/traceback.html#traceback.print_tb).6364Изменено в версии 3.5: Добавлена поддержка отрицательного значения *limit*.6566#### `traceback.extract_tb(tb, limit=None)`6768Возвращает объект [`StackSummary`](https://python-all.ru/3.11/library/traceback.html#traceback.StackSummary), представляющий список «предварительно обработанных»\\nзаписей трассировки стека, извлечённых из\\n[объекта traceback](https://python-all.ru/3.11/reference/datamodel.html#traceback-objects) *tb*. Это полезно\\nдля альтернативного форматирования трассировок стека. Необязательный аргумент *limit* имеет\\nто же значение, что и для [`print_tb()`](https://python-all.ru/3.11/library/traceback.html#traceback.print_tb). «Предварительно обработанная» запись\\nтрассировки стека – это объект [`FrameSummary`](https://python-all.ru/3.11/library/traceback.html#traceback.FrameSummary), содержащий атрибуты\\n[`filename`](https://python-all.ru/3.11/library/traceback.html#traceback.FrameSummary.filename), [`lineno`](https://python-all.ru/3.11/library/traceback.html#traceback.FrameSummary.lineno),\\n[`name`](https://python-all.ru/3.11/library/traceback.html#traceback.FrameSummary.name) и [`line`](https://python-all.ru/3.11/library/traceback.html#traceback.FrameSummary.line), представляющие\\nинформацию, которая обычно выводится для трассировки стека.6970#### `traceback.extract_stack(f=None, limit=None)`7172Извлекает необработанную трассировку из текущего [фрейма стека](https://python-all.ru/3.11/reference/datamodel.html#frame-objects). Возвращаемое значение имеет тот же формат, что и для [`extract_tb()`](https://python-all.ru/3.11/library/traceback.html#traceback.extract_tb). Необязательные аргументы *f* и *limit* имеют тот же смысл, что и для [`print_stack()`](https://python-all.ru/3.11/library/traceback.html#traceback.print_stack).7374#### `traceback.format_list(extracted_list)`7576Принимает список кортежей или объектов [`FrameSummary`](https://python-all.ru/3.11/library/traceback.html#traceback.FrameSummary), возвращённых [`extract_tb()`](https://python-all.ru/3.11/library/traceback.html#traceback.extract_tb) или [`extract_stack()`](https://python-all.ru/3.11/library/traceback.html#traceback.extract_stack), и возвращает список строк, готовых к выводу. Каждая строка в результирующем списке соответствует элементу с тем же индексом в исходном списке. Каждая строка заканчивается символом новой строки; строки могут также содержать внутренние переводы строк для тех элементов, чья строка исходного текста не равна `None`.7778#### `traceback.format_exception_only(exc, /[, value])`7980Форматирует часть трассировки стека, относящуюся к исключению, используя значение исключения, например возвращаемое [`sys.last_value`](https://python-all.ru/3.11/library/sys.html#sys.last_value). Возвращаемое значение – список строк, каждая заканчивается символом новой строки. Список содержит сообщение исключения, которое обычно представляет собой одну строку; однако для исключений [`SyntaxError`](https://python-all.ru/3.11/library/exceptions.html#SyntaxError) он содержит несколько строк, которые (при выводе на печать) отображают подробную информацию о том, где произошла синтаксическая ошибка. После сообщения список содержит [`notes`](https://python-all.ru/3.11/library/exceptions.html#BaseException.__notes__) исключения.8182Начиная с Python 3.10, вместо передачи *value* в качестве первого аргумента можно передавать объект исключения. Если передан *value*, первый аргумент игнорируется для обеспечения обратной совместимости.8384Изменено в версии 3.10: Параметр *etype* переименован в *exc* и теперь является только позиционным.8586Изменено в версии 3.11: Возвращаемый список теперь включает любые [`notes`](https://python-all.ru/3.11/library/exceptions.html#BaseException.__notes__), присоединённые к исключению.8788#### `traceback.format_exception(exc, /, [value, tb, ]limit=None, chain=True)`8990Форматирует трассировку стека и информацию об исключении. Аргументы имеют тот же смысл, что и соответствующие аргументы [`print_exception()`](https://python-all.ru/3.11/library/traceback.html#traceback.print_exception). Возвращаемое значение – список строк, каждая заканчивается символом новой строки, некоторые содержат внутренние переводы строк. При объединении и выводе этих строк печатается в точности тот же текст, что и при вызове [`print_exception()`](https://python-all.ru/3.11/library/traceback.html#traceback.print_exception).9192Изменено в версии 3.5: Аргумент *etype* игнорируется и определяется по типу *value*.9394Изменено в версии 3.10: Поведение и сигнатура этой функции были изменены в соответствии с [`print_exception()`](https://python-all.ru/3.11/library/traceback.html#traceback.print_exception).9596#### `traceback.format_exc(limit=None, chain=True)`9798Аналог `print_exc(limit)`, но возвращает строку вместо вывода в файл.99100#### `traceback.format_tb(tb, limit=None)`101102Сокращение для `format_list(extract_tb(tb, limit))`.103104#### `traceback.format_stack(f=None, limit=None)`105106Сокращение для `format_list(extract_stack(f, limit))`.107108#### `traceback.clear_frames(tb)`109110Очищает локальные переменные всех фреймов стека в [traceback](https://python-all.ru/3.11/reference/datamodel.html#traceback-objects) *tb*, вызывая метод [`clear()`](https://python-all.ru/3.11/reference/datamodel.html#frame.clear) для каждого [объекта фрейма](https://python-all.ru/3.11/reference/datamodel.html#frame-objects).111112Новое в версии 3.4.113114#### `traceback.walk_stack(f)`115116Обходит стек, следуя по [`f.f_back`](https://python-all.ru/3.11/reference/datamodel.html#frame.f_back) от указанного фрейма, возвращая фрейм и номер строки для каждого фрейма. Если *f* равен `None`, используется текущий стек. Эта вспомогательная функция используется с [`StackSummary.extract()`](https://python-all.ru/3.11/library/traceback.html#traceback.StackSummary.extract).117118Новое в версии 3.5.119120#### `traceback.walk_tb(tb)`121122Обходит трассировку стека, следуя по [`tb_next`](https://python-all.ru/3.11/reference/datamodel.html#traceback.tb_next), возвращая фрейм и номер строки для каждого фрейма. Эта вспомогательная функция используется с [`StackSummary.extract()`](https://python-all.ru/3.11/library/traceback.html#traceback.StackSummary.extract).123124Новое в версии 3.5.125126Модуль также определяет следующие классы:127128## `TracebackException` Объекты129130Новое в версии 3.5.131132Объекты `TracebackException` создаются на основе реальных исключений для сохранения данных для последующей печати в облегчённом виде.133134#### `class traceback.TracebackException(exc_type, exc_value, exc_traceback, *, limit=None, lookup_lines=True, capture_locals=False, compact=False, max_group_width=15, max_group_depth=10)`135136Захватывает исключение для последующего отображения. Параметры *limit*, *lookup\_lines* и *capture\_locals* такие же, как для класса [`StackSummary`](https://python-all.ru/3.11/library/traceback.html#traceback.StackSummary).137138Если *compact* равен true, в атрибутах класса сохраняются только данные, необходимые методу `TracebackException` [`format()`](https://python-all.ru/3.11/library/functions.html#format). В частности, поле [`__context__`](https://python-all.ru/3.11/library/traceback.html#traceback.TracebackException.__context__) вычисляется только если [`__cause__`](https://python-all.ru/3.11/library/traceback.html#traceback.TracebackException.__cause__) равен `None` и [`__suppress_context__`](https://python-all.ru/3.11/library/traceback.html#traceback.TracebackException.__suppress_context__) равен false.139140Обратите внимание, что при захвате локальных переменных они также отображаются в трассировке.141142Параметры *max\_group\_width* и *max\_group\_depth* управляют форматированием групп исключений (см. [`BaseExceptionGroup`](https://python-all.ru/3.11/library/exceptions.html#BaseExceptionGroup)). Глубина относится к уровню вложенности группы, а ширина – к размеру массива исключений одной группы исключений. Отформатированный вывод усекается при превышении любого из этих ограничений.143144Изменено в версии 3.10: Добавлен параметр *compact*.145146Изменено в версии 3.11: Добавлены параметры *max\_group\_width* и *max\_group\_depth*.147148#### `__cause__`149150`TracebackException` исходного [`__cause__`](https://python-all.ru/3.11/library/exceptions.html#BaseException.__cause__).151152#### `__context__`153154`TracebackException` исходного [`__context__`](https://python-all.ru/3.11/library/exceptions.html#BaseException.__context__).155156#### `exceptions`157158Если `self` представляет собой [`ExceptionGroup`](https://python-all.ru/3.11/library/exceptions.html#ExceptionGroup), это поле содержит список экземпляров `TracebackException`, представляющих вложенные исключения. В противном случае это `None`.159160Новое в версии 3.11.161162#### `__suppress_context__`163164Значение [`__suppress_context__`](https://python-all.ru/3.11/library/exceptions.html#BaseException.__suppress_context__) из исходного исключения.165166#### `__notes__`167168Значение [`__notes__`](https://python-all.ru/3.11/library/exceptions.html#BaseException.__notes__) из исходного исключения или `None`, если у исключения нет заметок. Если это не `None`, то оно форматируется в трассировке после строки исключения.169170Новое в версии 3.11.171172#### `stack`173174[`StackSummary`](https://python-all.ru/3.11/library/traceback.html#traceback.StackSummary), представляющий трассировку.175176#### `exc_type`177178Класс исходной обратной трассировки.179180#### `filename`181182Для синтаксических ошибок – имя файла, в котором произошла ошибка.183184#### `lineno`185186Для синтаксических ошибок – номер строки, в которой произошла ошибка.187188#### `end_lineno`189190Для синтаксических ошибок – номер конечной строки, в которой произошла ошибка. Может быть `None`, если отсутствует.191192Новое в версии 3.10.193194#### `text`195196Для синтаксических ошибок – текст, в котором произошла ошибка.197198#### `offset`199200Для синтаксических ошибок – смещение в тексте, где произошла ошибка.201202#### `end_offset`203204Для синтаксических ошибок – конечное смещение в тексте, где произошла ошибка. Может быть `None`, если отсутствует.205206Новое в версии 3.10.207208#### `msg`209210Для синтаксических ошибок – сообщение об ошибке компилятора.211212#### `classmethod from_exception(exc, *, limit=None, lookup_lines=True, capture_locals=False)`213214Захватывает исключение для последующего отображения. Параметры *limit*, *lookup\_lines* и *capture\_locals* такие же, как для класса [`StackSummary`](https://python-all.ru/3.11/library/traceback.html#traceback.StackSummary).215216Обратите внимание, что при захвате локальных переменных они также отображаются в трассировке.217218#### `print(*, file=None, chain=True)`219220Выводит в *file* (по умолчанию `sys.stderr`) информацию об исключении, возвращённую [`format()`](https://python-all.ru/3.11/library/functions.html#format).221222Новое в версии 3.11.223224#### `format(*, chain=True)`225226Форматирует исключение.227228Если *chain* не равно `True`, то [`__cause__`](https://python-all.ru/3.11/library/traceback.html#traceback.TracebackException.__cause__) и [`__context__`](https://python-all.ru/3.11/library/traceback.html#traceback.TracebackException.__context__) не будут отформатированы.229230Возвращаемое значение – генератор строк, каждая из которых завершается символом новой строки, и некоторые содержат внутренние переводы строк. [`print_exception()`](https://python-all.ru/3.11/library/traceback.html#traceback.print_exception) является обёрткой вокруг этого метода, которая просто выводит строки в файл.231232#### `format_exception_only()`233234Форматирует часть трассировки, относящуюся к исключению.235236Возвращаемое значение – генератор строк, каждая из которых завершается символом новой строки.237238Генератор выдаёт сообщение исключения, за которым следуют его примечания\\n(если они есть). Сообщение об исключении обычно представляет собой одну строку;\\nоднако для исключений [`SyntaxError`](https://python-all.ru/3.11/library/exceptions.html#SyntaxError) оно состоит из нескольких\\nстрок, которые при выводе отображают подробную информацию о том, где\\nпроизошла синтаксическая ошибка.239240Изменено в версии 3.11: Примечания исключения ([`notes`](https://python-all.ru/3.11/library/exceptions.html#BaseException.__notes__)) теперь включаются в вывод.241242## `StackSummary` Объекты243244Новое в версии 3.5.245246Объекты `StackSummary` представляют стек вызовов, готовый к форматированию.247248#### `class traceback.StackSummary`249250#### `classmethod extract(frame_gen, *, limit=None, lookup_lines=True, capture_locals=False)`251252Создаёт объект `StackSummary` из генератора фреймов (такого, как возвращается [`walk_stack()`](https://python-all.ru/3.11/library/traceback.html#traceback.walk_stack) или [`walk_tb()`](https://python-all.ru/3.11/library/traceback.html#traceback.walk_tb)).253254Если указан параметр *limit*, из *frame\_gen* берётся только указанное количество фреймов. Если *lookup\_lines* равно `False`, возвращённые объекты [`FrameSummary`](https://python-all.ru/3.11/library/traceback.html#traceback.FrameSummary) ещё не прочитают свои строки, что удешевляет создание `StackSummary` (это может быть полезно, если он, возможно, не будет фактически отформатирован). Если *capture\_locals* равно `True`, локальные переменные в каждом `FrameSummary` захватываются в виде представления объектов.255256#### `classmethod from_list(a_list)`257258Создаёт объект `StackSummary` из предоставленного списка объектов [`FrameSummary`](https://python-all.ru/3.11/library/traceback.html#traceback.FrameSummary) или списка кортежей старого образца. Каждый кортеж должен быть кортежем из 4 элементов: *filename*, *lineno*, *name*, *line*.259260#### `format()`261262Возвращает список строк, готовых к печати. Каждая строка в результирующем списке соответствует одному [фрейму](https://python-all.ru/3.11/reference/datamodel.html#frame-objects) из стека. Каждая строка заканчивается символом новой строки; строки также могут содержать внутренние переводы строк – для тех элементов, у которых есть строки исходного кода.263264Для длинных последовательностей одинаковых фреймов и строк сначала показываются первые несколько повторений, а затем сводная строка с указанием точного числа последующих повторений.265266Изменено в версии 3.6: Длинные последовательности повторяющихся фреймов теперь сокращаются.267268#### `format_frame_summary(frame_summary)`269270Возвращает строку для печати одного из [фреймов](https://python-all.ru/3.11/reference/datamodel.html#frame-objects), входящих в стек. Этот метод вызывается для каждого объекта [`FrameSummary`](https://python-all.ru/3.11/library/traceback.html#traceback.FrameSummary), который должен быть выведен методом [`StackSummary.format()`](https://python-all.ru/3.11/library/traceback.html#traceback.StackSummary.format). Если он возвращает `None`, то фрейм пропускается в выводе.271272Новое в версии 3.11.273274## `FrameSummary` Объекты275276Новое в версии 3.5.277278Объект `FrameSummary` представляет отдельный [фрейм](https://python-all.ru/3.11/reference/datamodel.html#frame-objects) в [трассировке](https://python-all.ru/3.11/reference/datamodel.html#traceback-objects).279280#### `class traceback.FrameSummary(filename, lineno, name, lookup_line=True, locals=None, line=None)`281282Представляет отдельный [фрейм](https://python-all.ru/3.11/reference/datamodel.html#frame-objects) в [traceback](https://python-all.ru/3.11/reference/datamodel.html#traceback-objects) или стеке, который форматируется или выводится на печать. Он может опционально содержать строковое представление локальных переменных фрейма. Если *lookup\_line* равен `False`, исходный код не ищется до тех пор, пока у `FrameSummary` не будет получен доступ к атрибуту [`line`](https://python-all.ru/3.11/library/traceback.html#traceback.FrameSummary.line) (что также происходит при приведении его к [`tuple`](https://python-all.ru/3.11/library/stdtypes.html#tuple)). [`line`](https://python-all.ru/3.11/library/traceback.html#traceback.FrameSummary.line) может быть предоставлен напрямую, и это предотвратит любые поиски строк. *locals* – это необязательный словарь локальных переменных, и если он указан, представления переменных сохраняются в сводке для последующего отображения.283284Экземпляры `FrameSummary` имеют следующие атрибуты:285286#### `filename`287288Имя файла исходного кода для этого фрейма. Эквивалентно обращению к [`f.f_code.co_filename`](https://python-all.ru/3.11/reference/datamodel.html#codeobject.co_filename) для [объекта фрейма](https://python-all.ru/3.11/reference/datamodel.html#frame-objects) *f*.289290#### `lineno`291292Номер строки исходного кода для этого фрейма.293294#### `name`295296Эквивалентно обращению к [`f.f_code.co_name`](https://python-all.ru/3.11/reference/datamodel.html#codeobject.co_name) на [объекте кадра](https://python-all.ru/3.11/reference/datamodel.html#frame-objects) *f*.297298#### `line`299300Строка, представляющая исходный код для этого кадра, с удалёнными начальными и конечными пробелами. Если исходный код недоступен, это `None`.301302## Примеры traceback303304Этот простой пример реализует базовый цикл чтение-вычисление-печать, похожий на (но менее полезный, чем) стандартный цикл интерактивного интерпретатора Python. Для более полной реализации цикла интерпретатора обратитесь к модулю [`code`](https://python-all.ru/3.11/library/code.html#module-code).305306```python307import sys, traceback308309def run_user_code(envdir):310 source = input(">>> ")311 try:312 exec(source, envdir)313 except Exception:314 print("Exception in user code:")315 print("-"*60)316 traceback.print_exc(file=sys.stdout)317 print("-"*60)318319envdir = {}320while True:321 run_user_code(envdir)322```323324Следующий пример демонстрирует различные способы вывода и форматирования исключения и трассировки:325326```python327import sys, traceback328329def lumberjack():330 bright_side_of_life()331332def bright_side_of_life():333 return tuple()[0]334335try:336 lumberjack()337except IndexError:338 exc = sys.exception()339 print("*** print_tb:")340 traceback.print_tb(exc.__traceback__, limit=1, file=sys.stdout)341 print("*** print_exception:")342 traceback.print_exception(exc, limit=2, file=sys.stdout)343 print("*** print_exc:")344 traceback.print_exc(limit=2, file=sys.stdout)345 print("*** format_exc, first and last line:")346 formatted_lines = traceback.format_exc().splitlines()347 print(formatted_lines[0])348 print(formatted_lines[-1])349 print("*** format_exception:")350 print(repr(traceback.format_exception(exc)))351 print("*** extract_tb:")352 print(repr(traceback.extract_tb(exc.__traceback__)))353 print("*** format_tb:")354 print(repr(traceback.format_tb(exc.__traceback__)))355 print("*** tb_lineno:", exc.__traceback__.tb_lineno)356```357358Вывод для примера будет выглядеть примерно так:359360```text361*** print_tb:362 File "<doctest...>", line 10, in <module>363 lumberjack()364*** print_exception:365Traceback (most recent call last):366 File "<doctest...>", line 10, in <module>367 lumberjack()368 File "<doctest...>", line 4, in lumberjack369 bright_side_of_life()370IndexError: tuple index out of range371*** print_exc:372Traceback (most recent call last):373 File "<doctest...>", line 10, in <module>374 lumberjack()375 File "<doctest...>", line 4, in lumberjack376 bright_side_of_life()377IndexError: tuple index out of range378*** format_exc, first and last line:379Traceback (most recent call last):380IndexError: tuple index out of range381*** format_exception:382['Traceback (most recent call last):\n',383 ' File "<doctest default[0]>", line 10, in <module>\n lumberjack()\n',384 ' File "<doctest default[0]>", line 4, in lumberjack\n bright_side_of_life()\n',385 ' File "<doctest default[0]>", line 7, in bright_side_of_life\n return tuple()[0]\n ~~~~~~~^^^\n',386 'IndexError: tuple index out of range\n']387*** extract_tb:388[<FrameSummary file <doctest...>, line 10 in <module>>,389 <FrameSummary file <doctest...>, line 4 in lumberjack>,390 <FrameSummary file <doctest...>, line 7 in bright_side_of_life>]391*** format_tb:392[' File "<doctest default[0]>", line 10, in <module>\n lumberjack()\n',393 ' File "<doctest default[0]>", line 4, in lumberjack\n bright_side_of_life()\n',394 ' File "<doctest default[0]>", line 7, in bright_side_of_life\n return tuple()[0]\n ~~~~~~~^^^\n']395*** tb_lineno: 10396```397398Следующий пример показывает различные способы вывода и форматирования стека:399400```python401>>> import traceback402>>> def another_function():403... lumberstack()404...405>>> def lumberstack():406... traceback.print_stack()407... print(repr(traceback.extract_stack()))408... print(repr(traceback.format_stack()))409...410>>> another_function()411 File "<doctest>", line 10, in <module>412 another_function()413 File "<doctest>", line 3, in another_function414 lumberstack()415 File "<doctest>", line 6, in lumberstack416 traceback.print_stack()417[('<doctest>', 10, '<module>', 'another_function()'),418 ('<doctest>', 3, 'another_function', 'lumberstack()'),419 ('<doctest>', 7, 'lumberstack', 'print(repr(traceback.extract_stack()))')]420[' File "<doctest>", line 10, in <module>\n another_function()\n',421 ' File "<doctest>", line 3, in another_function\n lumberstack()\n',422 ' File "<doctest>", line 8, in lumberstack\n print(repr(traceback.format_stack()))\n']423```424425Этот последний пример демонстрирует несколько последних функций форматирования:426427```pycon428>>> import traceback429>>> traceback.format_list([('spam.py', 3, '<module>', 'spam.eggs()'),430... ('eggs.py', 42, 'eggs', 'return "bacon"')])431[' File "spam.py", line 3, in <module>\n spam.eggs()\n',432 ' File "eggs.py", line 42, in eggs\n return "bacon"\n']433>>> an_error = IndexError('tuple index out of range')434>>> traceback.format_exception_only(type(an_error), an_error)435['IndexError: tuple index out of range\n']436```437