traceback.md
1> **Источник:** https://python-all.ru/3.13/library/traceback.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `traceback` – печать или получение трассировки стека89**Исходный код:** [Lib/traceback.py](https://python-all.ru/src/3.13/Lib/traceback.py)1011---1213Этот модуль предоставляет стандартный интерфейс для извлечения, форматирования и печати трассировок стека программ Python. Он более гибкий, чем стандартный вывод трассировки интерпретатора, и поэтому позволяет настраивать некоторые аспекты вывода. Наконец, он содержит утилиту для захвата достаточной информации об исключении, чтобы вывести её позже, без необходимости сохранять ссылку на само исключение. Поскольку исключения могут быть корнями больших графов объектов, эта утилита может значительно улучшить управление памятью.1415Модуль использует [объекты traceback](https://python-all.ru/3.13/reference/datamodel.html#traceback-objects) – это объекты типа [`types.TracebackType`](https://python-all.ru/3.13/library/types.html#types.TracebackType), которые присваиваются полю [`__traceback__`](https://python-all.ru/3.13/library/exceptions.html#BaseException.__traceback__) экземпляров [`BaseException`](https://python-all.ru/3.13/library/exceptions.html#BaseException).1617> **См. также**18>19> **Модуль [`faulthandler`](https://python-all.ru/3.13/library/faulthandler.html#module-faulthandler)**20>21> Используется для явного дампа трассировок Python при сбое, по таймауту или по сигналу пользователя.22>23> **Модуль [`pdb`](https://python-all.ru/3.13/library/pdb.html#module-pdb)**24>25> Интерактивный отладчик исходного кода для программ на Python.2627API модуля можно разделить на две части:2829- Функции уровня модуля, предоставляющие базовую функциональность, которые полезны для интерактивного анализа исключений и трассировок.30- Класс [`TracebackException`](https://python-all.ru/3.13/library/traceback.html#traceback.TracebackException) и его вспомогательные классы [`StackSummary`](https://python-all.ru/3.13/library/traceback.html#traceback.StackSummary) и [`FrameSummary`](https://python-all.ru/3.13/library/traceback.html#traceback.FrameSummary). Они обеспечивают как большую гибкость формируемого вывода, так и возможность хранить информацию, необходимую для последующего форматирования, без сохранения ссылок на фактические объекты исключений и трассировок.3132## Функции уровня модуля3334#### `traceback.print_tb(tb, limit=None, file=None)`3536Выводит до *limit* записей трассировки стека из [объекта traceback](https://python-all.ru/3.13/reference/datamodel.html#traceback-objects) *tb* (начиная с фрейма вызывающего), если *limit* положителен. В противном случае выводит последние `abs(limit)` записей. Если *limit* опущен или равен `None`, выводятся все записи. Если *file* опущен или равен `None`, вывод направляется в [`sys.stderr`](https://python-all.ru/3.13/library/sys.html#sys.stderr); в противном случае он должен быть открытым [файлом](https://python-all.ru/3.13/glossary.html#term-file-object) или [объектом, подобным файлу](https://python-all.ru/3.13/glossary.html#term-file-like-object), для получения вывода.3738> **Примечание**39>40> Смысл параметра *limit* отличается от смысла [`sys.tracebacklimit`](https://python-all.ru/3.13/library/sys.html#sys.tracebacklimit). Отрицательное значение *limit* соответствует положительному значению `sys.tracebacklimit`, тогда как поведение положительного значения *limit* нельзя получить с помощью `sys.tracebacklimit`.4142Изменено в версии 3.5: Добавлена поддержка отрицательного значения *limit*.4344#### `traceback.print_exception(exc, /, [value, tb, ]limit=None, file=None, chain=True)`4546Выводит информацию об исключении и записи трассировки стека из [объекта traceback](https://python-all.ru/3.13/reference/datamodel.html#traceback-objects) *tb* в *file*. Отличается от [`print_tb()`](https://python-all.ru/3.13/library/traceback.html#traceback.print_tb) следующим:4748- если *tb* не равен `None`, выводится заголовок `Traceback (most recent call last):`49- он выводит тип исключения и *value* после трассировки стека5051- если *type(value)* равен [`SyntaxError`](https://python-all.ru/3.13/library/exceptions.html#SyntaxError) и *value* имеет соответствующий формат, выводится строка, в которой произошла синтаксическая ошибка, с символом «^», указывающим приблизительную позицию ошибки.5253Начиная с Python 3.10, вместо передачи *value* и *tb* первым аргументом можно передавать объект исключения. Если *value* и *tb* указаны, первый аргумент игнорируется для обеспечения обратной совместимости.5455Необязательный аргумент *limit* имеет тот же смысл, что и для [`print_tb()`](https://python-all.ru/3.13/library/traceback.html#traceback.print_tb). Если *chain* равен true (по умолчанию), то также выводятся связанные исключения (атрибуты [`__cause__`](https://python-all.ru/3.13/library/exceptions.html#BaseException.__cause__) или [`__context__`](https://python-all.ru/3.13/library/exceptions.html#BaseException.__context__) исключения), как это делает сам интерпретатор при выводе необработанного исключения.5657Изменено в версии 3.5: Аргумент *etype* игнорируется и определяется по типу *value*.5859Изменено в версии 3.10: Параметр *etype* переименован в *exc* и теперь является только позиционным.6061#### `traceback.print_exc(limit=None, file=None, chain=True)`6263Это сокращение для `print_exception(sys.exception(), limit=limit, file=file, chain=chain)`.6465#### `traceback.print_last(limit=None, file=None, chain=True)`6667Это сокращение для `print_exception(sys.last_exc, limit=limit, file=file, chain=chain)`. Обычно оно работает только после того, как исключение достигло интерактивного приглашения (см. [`sys.last_exc`](https://python-all.ru/3.13/library/sys.html#sys.last_exc)).6869#### `traceback.print_stack(f=None, limit=None, file=None)`7071Выводит до *limit* записей трассировки стека (начиная с точки вызова), если *limit* положителен. В противном случае выводит последние `abs(limit)` записей. Если *limit* опущен или равен `None`, выводятся все записи. Необязательный аргумент *f* можно использовать для указания альтернативного [фрейма стека](https://python-all.ru/3.13/reference/datamodel.html#frame-objects), с которого начинать. Необязательный аргумент *file* имеет тот же смысл, что и для [`print_tb()`](https://python-all.ru/3.13/library/traceback.html#traceback.print_tb).7273Изменено в версии 3.5: Добавлена поддержка отрицательного значения *limit*.7475#### `traceback.extract_tb(tb, limit=None)`7677Возвращает объект [`StackSummary`](https://python-all.ru/3.13/library/traceback.html#traceback.StackSummary), представляющий список «предварительно обработанных» записей трассировки стека, извлечённых из [объекта traceback](https://python-all.ru/3.13/reference/datamodel.html#traceback-objects) *tb*. Полезен для альтернативного форматирования трассировок стека. Необязательный аргумент *limit* имеет тот же смысл, что и для [`print_tb()`](https://python-all.ru/3.13/library/traceback.html#traceback.print_tb). «Предварительно обработанная» запись трассировки стека – это объект [`FrameSummary`](https://python-all.ru/3.13/library/traceback.html#traceback.FrameSummary) с атрибутами, представляющими информацию, которая обычно выводится для трассировки стека.7879#### `traceback.extract_stack(f=None, limit=None)`8081Извлекает необработанную трассировку из текущего [фрейма стека](https://python-all.ru/3.13/reference/datamodel.html#frame-objects). Возвращаемое значение имеет тот же формат, что и для [`extract_tb()`](https://python-all.ru/3.13/library/traceback.html#traceback.extract_tb). Необязательные аргументы *f* и *limit* имеют тот же смысл, что и для [`print_stack()`](https://python-all.ru/3.13/library/traceback.html#traceback.print_stack).8283#### `traceback.print_list(extracted_list, file=None)`8485Выводит список кортежей, возвращаемый [`extract_tb()`](https://python-all.ru/3.13/library/traceback.html#traceback.extract_tb) или [`extract_stack()`](https://python-all.ru/3.13/library/traceback.html#traceback.extract_stack), в виде форматированной трассировки стека в указанный файл. Если *file* равен `None`, вывод направляется в [`sys.stderr`](https://python-all.ru/3.13/library/sys.html#sys.stderr).8687#### `traceback.format_list(extracted_list)`8889Принимает список кортежей или объектов [`FrameSummary`](https://python-all.ru/3.13/library/traceback.html#traceback.FrameSummary), возвращённых [`extract_tb()`](https://python-all.ru/3.13/library/traceback.html#traceback.extract_tb) или [`extract_stack()`](https://python-all.ru/3.13/library/traceback.html#traceback.extract_stack), и возвращает список строк, готовых к выводу. Каждая строка в результирующем списке соответствует элементу с тем же индексом в исходном списке. Каждая строка заканчивается символом новой строки; строки могут также содержать внутренние переводы строк для тех элементов, чья строка исходного текста не равна `None`.9091#### `traceback.format_exception_only(exc, /, [value, ]*, show_group=False)`9293Форматирует часть трассировки стека, относящуюся к исключению, используя значение исключения, например возвращаемое [`sys.last_exc`](https://python-all.ru/3.13/library/sys.html#sys.last_exc). Возвращаемое значение – список строк, каждая заканчивается символом новой строки. Список содержит сообщение исключения, которое обычно представляет собой одну строку; однако для исключений [`SyntaxError`](https://python-all.ru/3.13/library/exceptions.html#SyntaxError) он содержит несколько строк, которые (при выводе на печать) отображают подробную информацию о том, где произошла синтаксическая ошибка. После сообщения список содержит [`notes`](https://python-all.ru/3.13/library/exceptions.html#BaseException.__notes__) исключения.9495Начиная с Python 3.10, вместо передачи *value* в качестве первого аргумента можно передавать объект исключения. Если передан *value*, первый аргумент игнорируется для обеспечения обратной совместимости.9697Когда *show\_group* равно `True` и исключение является экземпляром [`BaseExceptionGroup`](https://python-all.ru/3.13/library/exceptions.html#BaseExceptionGroup), вложенные исключения также включаются рекурсивно с отступами, соответствующими глубине вложенности.9899Изменено в версии 3.10: Параметр *etype* переименован в *exc* и теперь является только позиционным.100101Изменено в версии 3.11: Возвращаемый список теперь включает любые [`notes`](https://python-all.ru/3.13/library/exceptions.html#BaseException.__notes__), присоединённые к исключению.102103Изменено в версии 3.13: Добавлен параметр *show\_group*.104105#### `traceback.format_exception(exc, /, [value, tb, ]limit=None, chain=True)`106107Форматирует трассировку стека и информацию об исключении. Аргументы имеют тот же смысл, что и соответствующие аргументы [`print_exception()`](https://python-all.ru/3.13/library/traceback.html#traceback.print_exception). Возвращаемое значение – список строк, каждая заканчивается символом новой строки, некоторые содержат внутренние переводы строк. При объединении и выводе этих строк печатается в точности тот же текст, что и при вызове `print_exception()`.108109Изменено в версии 3.5: Аргумент *etype* игнорируется и определяется по типу *value*.110111Изменено в версии 3.10: Поведение и сигнатура этой функции были изменены в соответствии с [`print_exception()`](https://python-all.ru/3.13/library/traceback.html#traceback.print_exception).112113#### `traceback.format_exc(limit=None, chain=True)`114115Аналог `print_exc(limit)`, но возвращает строку вместо вывода в файл.116117#### `traceback.format_tb(tb, limit=None)`118119Сокращение для `format_list(extract_tb(tb, limit))`.120121#### `traceback.format_stack(f=None, limit=None)`122123Сокращение для `format_list(extract_stack(f, limit))`.124125#### `traceback.clear_frames(tb)`126127Очищает локальные переменные всех фреймов стека в [traceback](https://python-all.ru/3.13/reference/datamodel.html#traceback-objects) *tb*, вызывая метод [`clear()`](https://python-all.ru/3.13/reference/datamodel.html#frame.clear) для каждого [объекта фрейма](https://python-all.ru/3.13/reference/datamodel.html#frame-objects).128129Добавлено в версии 3.4.130131#### `traceback.walk_stack(f)`132133Обходит стек, следуя по [`f.f_back`](https://python-all.ru/3.13/reference/datamodel.html#frame.f_back) от указанного фрейма, возвращая фрейм и номер строки для каждого фрейма. Если *f* равен `None`, используется текущий стек. Эта вспомогательная функция используется с [`StackSummary.extract()`](https://python-all.ru/3.13/library/traceback.html#traceback.StackSummary.extract).134135Добавлено в версии 3.5.136137#### `traceback.walk_tb(tb)`138139Обходит трассировку стека, следуя по [`tb_next`](https://python-all.ru/3.13/reference/datamodel.html#traceback.tb_next), возвращая фрейм и номер строки для каждого фрейма. Эта вспомогательная функция используется с [`StackSummary.extract()`](https://python-all.ru/3.13/library/traceback.html#traceback.StackSummary.extract).140141Добавлено в версии 3.5.142143## `TracebackException` Объекты144145Добавлено в версии 3.5.146147Объекты `TracebackException` создаются на основе реальных исключений для захвата данных для последующей печати. Они предоставляют более лёгкий способ хранения этой информации, избегая хранения ссылок на объекты [traceback](https://python-all.ru/3.13/reference/datamodel.html#traceback-objects) и [frame](https://python-all.ru/3.13/reference/datamodel.html#frame-objects). Кроме того, по сравнению с функциями уровня модуля, описанными выше, они предоставляют больше возможностей для настройки вывода.148149#### `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)`150151Захватывает исключение для последующего отображения. Значения *limit*, *lookup\_lines* и *capture\_locals* такие же, как для класса [`StackSummary`](https://python-all.ru/3.13/library/traceback.html#traceback.StackSummary).152153Если *compact* равен true, в атрибутах класса сохраняются только данные, необходимые методу `TracebackException` [`format()`](https://python-all.ru/3.13/library/functions.html#format). В частности, поле [`__context__`](https://python-all.ru/3.13/library/traceback.html#traceback.TracebackException.__context__) вычисляется только если [`__cause__`](https://python-all.ru/3.13/library/traceback.html#traceback.TracebackException.__cause__) равен `None` и [`__suppress_context__`](https://python-all.ru/3.13/library/traceback.html#traceback.TracebackException.__suppress_context__) равен false.154155Обратите внимание, что при захвате локальных переменных они также отображаются в трассировке.156157Параметры *max\_group\_width* и *max\_group\_depth* управляют форматированием групп исключений (см. [`BaseExceptionGroup`](https://python-all.ru/3.13/library/exceptions.html#BaseExceptionGroup)). Глубина относится к уровню вложенности группы, а ширина – к размеру массива исключений одной группы исключений. Отформатированный вывод усекается при превышении любого из этих ограничений.158159Изменено в версии 3.10: Добавлен параметр *compact*.160161Изменено в версии 3.11: Добавлены параметры *max\_group\_width* и *max\_group\_depth*.162163#### `__cause__`164165`TracebackException` исходного [`__cause__`](https://python-all.ru/3.13/library/exceptions.html#BaseException.__cause__).166167#### `__context__`168169`TracebackException` исходного [`__context__`](https://python-all.ru/3.13/library/exceptions.html#BaseException.__context__).170171#### `exceptions`172173Если `self` представляет собой [`ExceptionGroup`](https://python-all.ru/3.13/library/exceptions.html#ExceptionGroup), это поле содержит список экземпляров `TracebackException`, представляющих вложенные исключения. В противном случае это `None`.174175Добавлено в версии 3.12.176177#### `__suppress_context__`178179Значение [`__suppress_context__`](https://python-all.ru/3.13/library/exceptions.html#BaseException.__suppress_context__) из исходного исключения.180181#### `__notes__`182183Значение [`__notes__`](https://python-all.ru/3.13/library/exceptions.html#BaseException.__notes__) из исходного исключения или `None`, если у исключения нет заметок. Если это не `None`, то оно форматируется в трассировке после строки исключения.184185Добавлено в версии 3.12.186187#### `stack`188189[`StackSummary`](https://python-all.ru/3.13/library/traceback.html#traceback.StackSummary), представляющий трассировку.190191#### `exc_type`192193Класс исходного исключения.194195Устарело с версии 3.13.196197#### `exc_type_str`198199Строковое представление класса исходного исключения.200201Добавлено в версии 3.13.202203#### `filename`204205Для синтаксических ошибок – имя файла, в котором произошла ошибка.206207#### `lineno`208209Для синтаксических ошибок – номер строки, в которой произошла ошибка.210211#### `end_lineno`212213Для синтаксических ошибок – номер конечной строки, в которой произошла ошибка. Может быть `None`, если отсутствует.214215Добавлено в версии 3.10.216217#### `text`218219Для синтаксических ошибок – текст, в котором произошла ошибка.220221#### `offset`222223Для синтаксических ошибок – смещение в тексте, где произошла ошибка.224225#### `end_offset`226227Для синтаксических ошибок – конечное смещение в тексте, где произошла ошибка. Может быть `None`, если отсутствует.228229Добавлено в версии 3.10.230231#### `msg`232233Для синтаксических ошибок – сообщение об ошибке компилятора.234235#### `classmethod from_exception(exc, *, limit=None, lookup_lines=True, capture_locals=False, compact=False, max_group_width=15, max_group_depth=10)`236237Захватывает исключение для последующего отображения. Параметры *limit*, *lookup\_lines* и *capture\_locals* такие же, как для класса [`StackSummary`](https://python-all.ru/3.13/library/traceback.html#traceback.StackSummary).238239Обратите внимание, что при захвате локальных переменных они также отображаются в трассировке.240241#### `print(*, file=None, chain=True)`242243Выводит в *file* (по умолчанию `sys.stderr`) информацию об исключении, возвращённую [`format()`](https://python-all.ru/3.13/library/functions.html#format).244245Добавлено в версии 3.12.246247#### `format(*, chain=True)`248249Форматирует исключение.250251Если *chain* не равно `True`, то [`__cause__`](https://python-all.ru/3.13/library/traceback.html#traceback.TracebackException.__cause__) и [`__context__`](https://python-all.ru/3.13/library/traceback.html#traceback.TracebackException.__context__) не будут отформатированы.252253Возвращаемое значение – генератор строк, каждая из которых завершается символом новой строки, и некоторые содержат внутренние переводы строк. [`print_exception()`](https://python-all.ru/3.13/library/traceback.html#traceback.print_exception) является обёрткой вокруг этого метода, которая просто выводит строки в файл.254255#### `format_exception_only(*, show_group=False)`256257Форматирует часть трассировки, относящуюся к исключению.258259Возвращаемое значение – генератор строк, каждая из которых завершается символом новой строки.260261Когда *show\_group* равно `False`, генератор выдаёт сообщение об исключении, за которым следуют его примечания (если они есть). Сообщение об исключении обычно представляет собой одну строку; однако для исключений [`SyntaxError`](https://python-all.ru/3.13/library/exceptions.html#SyntaxError) оно состоит из нескольких строк, которые (при печати) отображают подробную информацию о месте возникновения синтаксической ошибки.262263Когда *show\_group* равно `True` и исключение является экземпляром [`BaseExceptionGroup`](https://python-all.ru/3.13/library/exceptions.html#BaseExceptionGroup), вложенные исключения также включаются рекурсивно с отступами, соответствующими глубине вложенности.264265Изменено в версии 3.11: Примечания исключения ([`notes`](https://python-all.ru/3.13/library/exceptions.html#BaseException.__notes__)) теперь включаются в вывод.266267Изменено в версии 3.13: Добавлен параметр *show\_group*.268269## `StackSummary` Объекты270271Добавлено в версии 3.5.272273Объекты `StackSummary` представляют стек вызовов, готовый к форматированию.274275#### `class traceback.StackSummary`276277#### `classmethod extract(frame_gen, *, limit=None, lookup_lines=True, capture_locals=False)`278279Создаёт объект `StackSummary` из генератора фреймов (такого, как возвращается [`walk_stack()`](https://python-all.ru/3.13/library/traceback.html#traceback.walk_stack) или [`walk_tb()`](https://python-all.ru/3.13/library/traceback.html#traceback.walk_tb)).280281Если указан параметр *limit*, из *frame\_gen* берётся только указанное количество фреймов. Если *lookup\_lines* равно `False`, возвращённые объекты [`FrameSummary`](https://python-all.ru/3.13/library/traceback.html#traceback.FrameSummary) ещё не прочитают свои строки, что удешевляет создание `StackSummary` (это может быть полезно, если он, возможно, не будет фактически отформатирован). Если *capture\_locals* равно `True`, локальные переменные в каждом `FrameSummary` захватываются в виде представления объектов.282283Изменено в версии 3.12: Исключения, возникающие в [`repr()`](https://python-all.ru/3.13/library/functions.html#repr) для локальной переменной (когда *capture\_locals* равно `True`), больше не распространяются на вызывающий код.284285#### `classmethod from_list(a_list)`286287Создаёт объект `StackSummary` из предоставленного списка объектов [`FrameSummary`](https://python-all.ru/3.13/library/traceback.html#traceback.FrameSummary) или списка кортежей старого образца. Каждый кортеж должен быть кортежем из 4 элементов: *filename*, *lineno*, *name*, *line*.288289#### `format()`290291Возвращает список строк, готовых к печати. Каждая строка в результирующем списке соответствует одному [фрейму](https://python-all.ru/3.13/reference/datamodel.html#frame-objects) из стека. Каждая строка заканчивается символом новой строки; строки также могут содержать внутренние переводы строк – для тех элементов, у которых есть строки исходного кода.292293Для длинных последовательностей одинаковых фреймов и строк сначала показываются первые несколько повторений, а затем сводная строка с указанием точного числа последующих повторений.294295Изменено в версии 3.6: Длинные последовательности повторяющихся фреймов теперь сокращаются.296297#### `format_frame_summary(frame_summary)`298299Возвращает строку для печати одного из [фреймов](https://python-all.ru/3.13/reference/datamodel.html#frame-objects), входящих в стек. Этот метод вызывается для каждого объекта [`FrameSummary`](https://python-all.ru/3.13/library/traceback.html#traceback.FrameSummary), который должен быть выведен методом [`StackSummary.format()`](https://python-all.ru/3.13/library/traceback.html#traceback.StackSummary.format). Если он возвращает `None`, то фрейм пропускается в выводе.300301Добавлено в версии 3.12.302303## `FrameSummary` Объекты304305Добавлено в версии 3.5.306307Объект `FrameSummary` представляет отдельный [фрейм](https://python-all.ru/3.13/reference/datamodel.html#frame-objects) в [трассировке](https://python-all.ru/3.13/reference/datamodel.html#traceback-objects).308309#### `class traceback.FrameSummary(filename, lineno, name, *, lookup_line=True, locals=None, line=None, end_lineno=None, colno=None, end_colno=None)`310311Представляет отдельный [фрейм](https://python-all.ru/3.13/reference/datamodel.html#frame-objects) в [трассировке](https://python-all.ru/3.13/reference/datamodel.html#traceback-objects) или стеке, который форматируется или выводится. Он может опционально содержать строковое представление локальных переменных фрейма. Если *lookup\_line* равно `False`, исходный код не запрашивается до тех пор, пока у `FrameSummary` не будет получен доступ к атрибуту [`line`](https://python-all.ru/3.13/library/traceback.html#traceback.FrameSummary.line) (что также происходит при приведении его к [`tuple`](https://python-all.ru/3.13/library/stdtypes.html#tuple)). `line` может быть передан напрямую, что предотвратит любой поиск строк. *locals* – необязательное отображение локальных переменных; если оно предоставлено, представления переменных сохраняются в сводке для последующего отображения.312313Экземпляры `FrameSummary` имеют следующие атрибуты:314315#### `filename`316317Имя файла исходного кода для этого фрейма. Эквивалентно обращению к [`f.f_code.co_filename`](https://python-all.ru/3.13/reference/datamodel.html#codeobject.co_filename) для [объекта фрейма](https://python-all.ru/3.13/reference/datamodel.html#frame-objects) *f*.318319#### `lineno`320321Номер строки исходного кода для этого фрейма.322323#### `name`324325Эквивалентно обращению к [`f.f_code.co_name`](https://python-all.ru/3.13/reference/datamodel.html#codeobject.co_name) на [объекте кадра](https://python-all.ru/3.13/reference/datamodel.html#frame-objects) *f*.326327#### `line`328329Строка, представляющая исходный код для этого кадра, с удалёнными начальными и конечными пробелами. Если исходный код недоступен, это `None`.330331#### `end_lineno`332333Номер последней строки исходного кода для этого кадра. По умолчанию он равен `lineno`, а нумерация начинается с 1.334335Изменено в версии 3.13: значение по умолчанию изменилось с `None` на `lineno`.336337#### `colno`338339Номер колонки исходного кода для этого кадра. По умолчанию он равен `None`, а нумерация начинается с 0.340341#### `end_colno`342343Номер последней колонки исходного кода для этого кадра. По умолчанию он равен `None`, а нумерация начинается с 0.344345## Примеры использования функций уровня модуля346347Этот простой пример реализует базовый цикл чтение-вычисление-печать, похожий на (но менее полезный, чем) стандартный цикл интерактивного интерпретатора Python. Для более полной реализации цикла интерпретатора обратитесь к модулю [`code`](https://python-all.ru/3.13/library/code.html#module-code).348349```python350import sys, traceback351352def run_user_code(envdir):353 source = input(">>> ")354 try:355 exec(source, envdir)356 except Exception:357 print("Exception in user code:")358 print("-"*60)359 traceback.print_exc(file=sys.stdout)360 print("-"*60)361362envdir = {}363while True:364 run_user_code(envdir)365```366367Следующий пример демонстрирует различные способы вывода и форматирования исключения и трассировки:368369```python370import sys, traceback371372def lumberjack():373 bright_side_of_life()374375def bright_side_of_life():376 return tuple()[0]377378try:379 lumberjack()380except IndexError as exc:381 print("*** print_tb:")382 traceback.print_tb(exc.__traceback__, limit=1, file=sys.stdout)383 print("*** print_exception:")384 traceback.print_exception(exc, limit=2, file=sys.stdout)385 print("*** print_exc:")386 traceback.print_exc(limit=2, file=sys.stdout)387 print("*** format_exc, first and last line:")388 formatted_lines = traceback.format_exc().splitlines()389 print(formatted_lines[0])390 print(formatted_lines[-1])391 print("*** format_exception:")392 print(repr(traceback.format_exception(exc)))393 print("*** extract_tb:")394 print(repr(traceback.extract_tb(exc.__traceback__)))395 print("*** format_tb:")396 print(repr(traceback.format_tb(exc.__traceback__)))397 print("*** tb_lineno:", exc.__traceback__.tb_lineno)398```399400Вывод для примера будет выглядеть примерно так:401402```text403*** print_tb:404 File "<doctest...>", line 10, in <module>405 lumberjack()406 ~~~~~~~~~~^^407*** print_exception:408Traceback (most recent call last):409 File "<doctest...>", line 10, in <module>410 lumberjack()411 ~~~~~~~~~~^^412 File "<doctest...>", line 4, in lumberjack413 bright_side_of_life()414 ~~~~~~~~~~~~~~~~~~~^^415IndexError: tuple index out of range416*** print_exc:417Traceback (most recent call last):418 File "<doctest...>", line 10, in <module>419 lumberjack()420 ~~~~~~~~~~^^421 File "<doctest...>", line 4, in lumberjack422 bright_side_of_life()423 ~~~~~~~~~~~~~~~~~~~^^424IndexError: tuple index out of range425*** format_exc, first and last line:426Traceback (most recent call last):427IndexError: tuple index out of range428*** format_exception:429['Traceback (most recent call last):\n',430 ' File "<doctest default[0]>", line 10, in <module>\n lumberjack()\n ~~~~~~~~~~^^\n',431 ' File "<doctest default[0]>", line 4, in lumberjack\n bright_side_of_life()\n ~~~~~~~~~~~~~~~~~~~^^\n',432 ' File "<doctest default[0]>", line 7, in bright_side_of_life\n return tuple()[0]\n ~~~~~~~^^^\n',433 'IndexError: tuple index out of range\n']434*** extract_tb:435[<FrameSummary file <doctest...>, line 10 in <module>>,436 <FrameSummary file <doctest...>, line 4 in lumberjack>,437 <FrameSummary file <doctest...>, line 7 in bright_side_of_life>]438*** format_tb:439[' File "<doctest default[0]>", line 10, in <module>\n lumberjack()\n ~~~~~~~~~~^^\n',440 ' File "<doctest default[0]>", line 4, in lumberjack\n bright_side_of_life()\n ~~~~~~~~~~~~~~~~~~~^^\n',441 ' File "<doctest default[0]>", line 7, in bright_side_of_life\n return tuple()[0]\n ~~~~~~~^^^\n']442*** tb_lineno: 10443```444445Следующий пример показывает различные способы вывода и форматирования стека:446447```python448>>> import traceback449>>> def another_function():450... lumberstack()451...452>>> def lumberstack():453... traceback.print_stack()454... print(repr(traceback.extract_stack()))455... print(repr(traceback.format_stack()))456...457>>> another_function()458 File "<doctest>", line 10, in <module>459 another_function()460 File "<doctest>", line 3, in another_function461 lumberstack()462 File "<doctest>", line 6, in lumberstack463 traceback.print_stack()464[('<doctest>', 10, '<module>', 'another_function()'),465 ('<doctest>', 3, 'another_function', 'lumberstack()'),466 ('<doctest>', 7, 'lumberstack', 'print(repr(traceback.extract_stack()))')]467[' File "<doctest>", line 10, in <module>\n another_function()\n',468 ' File "<doctest>", line 3, in another_function\n lumberstack()\n',469 ' File "<doctest>", line 8, in lumberstack\n print(repr(traceback.format_stack()))\n']470```471472Этот последний пример демонстрирует несколько последних функций форматирования:473474```pycon475>>> import traceback476>>> traceback.format_list([('spam.py', 3, '<module>', 'spam.eggs()'),477... ('eggs.py', 42, 'eggs', 'return "bacon"')])478[' File "spam.py", line 3, in <module>\n spam.eggs()\n',479 ' File "eggs.py", line 42, in eggs\n return "bacon"\n']480>>> an_error = IndexError('tuple index out of range')481>>> traceback.format_exception_only(an_error)482['IndexError: tuple index out of range\n']483```484485## Примеры использования [`TracebackException`](https://python-all.ru/3.13/library/traceback.html#traceback.TracebackException)486487С помощью вспомогательного класса появляется больше возможностей:488489```python490>>> import sys491>>> from traceback import TracebackException492>>>493>>> def lumberjack():494... bright_side_of_life()495...496>>> def bright_side_of_life():497... t = "bright", "side", "of", "life"498... return t[5]499...500>>> try:501... lumberjack()502... except IndexError as e:503... exc = e504...505>>> try:506... try:507... lumberjack()508... except:509... 1/0510... except Exception as e:511... chained_exc = e512...513>>> # limit работает, как и функции уровня модуля514>>> TracebackException.from_exception(exc, limit=-2).print()515Traceback (most recent call last):516 File "<python-input-1>", line 6, in lumberjack517 bright_side_of_life()518 ~~~~~~~~~~~~~~~~~~~^^519 File "<python-input-1>", line 10, in bright_side_of_life520 return t[5]521 ~^^^522IndexError: tuple index out of range523524>>> # capture_locals добавляет локальные переменные в кадры стека525>>> TracebackException.from_exception(exc, limit=-2, capture_locals=True).print()526Traceback (most recent call last):527 File "<python-input-1>", line 6, in lumberjack528 bright_side_of_life()529 ~~~~~~~~~~~~~~~~~~~^^530 File "<python-input-1>", line 10, in bright_side_of_life531 return t[5]532 ~^^^533 t = ("bright", "side", "of", "life")534IndexError: tuple index out of range535536>>> # Именованный аргумент *chain* в print() управляет тем, показываются ли цепочки537>>> # исключений.538>>> TracebackException.from_exception(chained_exc).print()539Traceback (most recent call last):540 File "<python-input-19>", line 4, in <module>541 lumberjack()542 ~~~~~~~~~~^^543 File "<python-input-8>", line 7, in lumberjack544 bright_side_of_life()545 ~~~~~~~~~~~~~~~~~~~^^546 File "<python-input-8>", line 11, in bright_side_of_life547 return t[5]548 ~^^^549IndexError: tuple index out of range550551During handling of the above exception, another exception occurred:552553Traceback (most recent call last):554 File "<python-input-19>", line 6, in <module>555 1/0556 ~^~557ZeroDivisionError: division by zero558559>>> TracebackException.from_exception(chained_exc).print(chain=False)560Traceback (most recent call last):561 File "<python-input-19>", line 6, in <module>562 1/0563 ~^~564ZeroDivisionError: division by zero565```566