Документация Python неофициальный перевод

traceback.md

570 строк · 43.5 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.15/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.15/Lib/traceback.py)1011---1213Этот модуль предоставляет стандартный интерфейс для извлечения, форматирования и печати трассировок стека программ Python. Он более гибкий, чем стандартный вывод трассировки интерпретатора, и поэтому позволяет настраивать некоторые аспекты вывода. Наконец, он содержит утилиту для захвата достаточной информации об исключении, чтобы вывести её позже, без необходимости сохранять ссылку на само исключение. Поскольку исключения могут быть корнями больших графов объектов, эта утилита может значительно улучшить управление памятью.1415Модуль использует [объекты traceback](https://python-all.ru/3.15/reference/datamodel.html#traceback-objects) – это объекты типа [`types.TracebackType`](https://python-all.ru/3.15/library/types.html#types.TracebackType), которые присваиваются полю [`__traceback__`](https://python-all.ru/3.15/library/exceptions.html#BaseException.__traceback__) экземпляров [`BaseException`](https://python-all.ru/3.15/library/exceptions.html#BaseException).1617> **См. также**18>19> **Модуль [`faulthandler`](https://python-all.ru/3.15/library/faulthandler.html#module-faulthandler)**20>21> Используется для явного дампа трассировок Python при сбое, по таймауту или по сигналу пользователя.22>23> **Модуль [`pdb`](https://python-all.ru/3.15/library/pdb.html#module-pdb)**24>25> Интерактивный отладчик исходного кода для программ на Python.2627API модуля можно разделить на две части:2829- Функции уровня модуля, предоставляющие базовую функциональность, которые полезны для интерактивного анализа исключений и трассировок.30- Класс [`TracebackException`](https://python-all.ru/3.15/library/traceback.html#traceback.TracebackException) и его вспомогательные классы [`StackSummary`](https://python-all.ru/3.15/library/traceback.html#traceback.StackSummary) и [`FrameSummary`](https://python-all.ru/3.15/library/traceback.html#traceback.FrameSummary). Они обеспечивают как большую гибкость формируемого вывода, так и возможность хранить информацию, необходимую для последующего форматирования, без сохранения ссылок на фактические объекты исключений и трассировок.3132Добавлено в версии 3.13: Вывод по умолчанию раскрашивается и может быть [настроен с помощью переменных окружения](https://python-all.ru/3.15/using/cmdline.html#using-on-controlling-color).3334## Функции уровня модуля3536#### `traceback.print_tb(tb, limit=None, file=None)`3738Выводит до *limit* записей трассировки стека из [объекта traceback](https://python-all.ru/3.15/reference/datamodel.html#traceback-objects) *tb* (начиная с фрейма вызывающего), если *limit* положителен. В противном случае выводит последние `abs(limit)` записей. Если *limit* опущен или равен `None`, выводятся все записи. Если *file* опущен или равен `None`, вывод направляется в [`sys.stderr`](https://python-all.ru/3.15/library/sys.html#sys.stderr); в противном случае он должен быть открытым [файлом](https://python-all.ru/3.15/glossary.html#term-file-object) или [объектом, подобным файлу](https://python-all.ru/3.15/glossary.html#term-file-like-object), для получения вывода.3940> **Примечание**41>42> Смысл параметра *limit* отличается от смысла [`sys.tracebacklimit`](https://python-all.ru/3.15/library/sys.html#sys.tracebacklimit). Отрицательное значение *limit* соответствует положительному значению `sys.tracebacklimit`, тогда как поведение положительного значения *limit* нельзя получить с помощью `sys.tracebacklimit`.4344Изменено в версии 3.5: Добавлена поддержка отрицательного значения *limit*.4546#### `traceback.print_exception(exc, /, [value, tb, ]limit=None, file=None, chain=True)`4748Выводит информацию об исключении и записи трассировки стека из [объекта traceback](https://python-all.ru/3.15/reference/datamodel.html#traceback-objects) *tb* в *file*. Отличается от [`print_tb()`](https://python-all.ru/3.15/library/traceback.html#traceback.print_tb) следующим:4950- если *tb* не равен `None`, выводится заголовок `Traceback (most recent call last):`51- он выводит тип исключения и *value* после трассировки стека5253- если *type(value)* равен [`SyntaxError`](https://python-all.ru/3.15/library/exceptions.html#SyntaxError) и *value* имеет соответствующий формат, выводится строка, в которой произошла синтаксическая ошибка, с символом «^», указывающим приблизительную позицию ошибки.5455Начиная с Python 3.10, вместо передачи *value* и *tb* первым аргументом можно передавать объект исключения. Если *value* и *tb* указаны, первый аргумент игнорируется для обеспечения обратной совместимости.5657Необязательный аргумент *limit* имеет тот же смысл, что и для [`print_tb()`](https://python-all.ru/3.15/library/traceback.html#traceback.print_tb). Если *chain* равен true (по умолчанию), то также выводятся связанные исключения (атрибуты [`__cause__`](https://python-all.ru/3.15/library/exceptions.html#BaseException.__cause__) или [`__context__`](https://python-all.ru/3.15/library/exceptions.html#BaseException.__context__) исключения), как это делает сам интерпретатор при выводе необработанного исключения.5859Изменено в версии 3.5: Аргумент *etype* игнорируется и определяется по типу *value*.6061Изменено в версии 3.10: Параметр *etype* переименован в *exc* и теперь является только позиционным.6263#### `traceback.print_exc(limit=None, file=None, chain=True)`6465Это сокращение для `print_exception(sys.exception(), limit=limit, file=file, chain=chain)`.6667#### `traceback.print_last(limit=None, file=None, chain=True)`6869Это сокращение для `print_exception(sys.last_exc, limit=limit, file=file, chain=chain)`. Обычно оно работает только после того, как исключение достигло интерактивного приглашения (см. [`sys.last_exc`](https://python-all.ru/3.15/library/sys.html#sys.last_exc)).7071#### `traceback.print_stack(f=None, limit=None, file=None)`7273Выводит до *limit* записей трассировки стека (начиная с точки вызова), если *limit* положителен. В противном случае выводит последние `abs(limit)` записей. Если *limit* опущен или равен `None`, выводятся все записи. Необязательный аргумент *f* можно использовать для указания альтернативного [фрейма стека](https://python-all.ru/3.15/reference/datamodel.html#frame-objects), с которого начинать. Необязательный аргумент *file* имеет тот же смысл, что и для [`print_tb()`](https://python-all.ru/3.15/library/traceback.html#traceback.print_tb).7475Изменено в версии 3.5: Добавлена поддержка отрицательного значения *limit*.7677#### `traceback.extract_tb(tb, limit=None)`7879Возвращает объект [`StackSummary`](https://python-all.ru/3.15/library/traceback.html#traceback.StackSummary), представляющий список «предварительно обработанных» записей трассировки стека, извлечённых из [объекта traceback](https://python-all.ru/3.15/reference/datamodel.html#traceback-objects) *tb*. Полезен для альтернативного форматирования трассировок стека. Необязательный аргумент *limit* имеет тот же смысл, что и для [`print_tb()`](https://python-all.ru/3.15/library/traceback.html#traceback.print_tb). «Предварительно обработанная» запись трассировки стека – это объект [`FrameSummary`](https://python-all.ru/3.15/library/traceback.html#traceback.FrameSummary) с атрибутами, представляющими информацию, которая обычно выводится для трассировки стека.8081#### `traceback.extract_stack(f=None, limit=None)`8283Извлекает необработанную трассировку из текущего [фрейма стека](https://python-all.ru/3.15/reference/datamodel.html#frame-objects). Возвращаемое значение имеет тот же формат, что и для [`extract_tb()`](https://python-all.ru/3.15/library/traceback.html#traceback.extract_tb). Необязательные аргументы *f* и *limit* имеют тот же смысл, что и для [`print_stack()`](https://python-all.ru/3.15/library/traceback.html#traceback.print_stack).8485#### `traceback.print_list(extracted_list, file=None)`8687Выводит список кортежей, возвращаемый [`extract_tb()`](https://python-all.ru/3.15/library/traceback.html#traceback.extract_tb) или [`extract_stack()`](https://python-all.ru/3.15/library/traceback.html#traceback.extract_stack), в виде форматированной трассировки стека в указанный файл. Если *file* равен `None`, вывод направляется в [`sys.stderr`](https://python-all.ru/3.15/library/sys.html#sys.stderr).8889#### `traceback.format_list(extracted_list)`9091Принимает список кортежей или объектов [`FrameSummary`](https://python-all.ru/3.15/library/traceback.html#traceback.FrameSummary), возвращённых [`extract_tb()`](https://python-all.ru/3.15/library/traceback.html#traceback.extract_tb) или [`extract_stack()`](https://python-all.ru/3.15/library/traceback.html#traceback.extract_stack), и возвращает список строк, готовых к выводу. Каждая строка в результирующем списке соответствует элементу с тем же индексом в исходном списке. Каждая строка заканчивается символом новой строки; строки могут также содержать внутренние переводы строк для тех элементов, чья строка исходного текста не равна `None`.9293#### `traceback.format_exception_only(exc, /, [value, ]*, show_group=False)`9495Форматирует часть трассировки стека, относящуюся к исключению, используя значение исключения, например возвращаемое [`sys.last_exc`](https://python-all.ru/3.15/library/sys.html#sys.last_exc). Возвращаемое значение – список строк, каждая заканчивается символом новой строки. Список содержит сообщение исключения, которое обычно представляет собой одну строку; однако для исключений [`SyntaxError`](https://python-all.ru/3.15/library/exceptions.html#SyntaxError) он содержит несколько строк, которые (при выводе на печать) отображают подробную информацию о том, где произошла синтаксическая ошибка. После сообщения список содержит [`notes`](https://python-all.ru/3.15/library/exceptions.html#BaseException.__notes__) исключения.9697Начиная с Python 3.10, вместо передачи *value* в качестве первого аргумента можно передавать объект исключения. Если передан *value*, первый аргумент игнорируется для обеспечения обратной совместимости.9899Когда *show\_group* равно `True` и исключение является экземпляром [`BaseExceptionGroup`](https://python-all.ru/3.15/library/exceptions.html#BaseExceptionGroup), вложенные исключения также включаются рекурсивно с отступами, соответствующими глубине вложенности.100101Изменено в версии 3.10: Параметр *etype* переименован в *exc* и теперь является только позиционным.102103Изменено в версии 3.11: Возвращаемый список теперь включает любые [`notes`](https://python-all.ru/3.15/library/exceptions.html#BaseException.__notes__), присоединённые к исключению.104105Изменено в версии 3.13: Добавлен параметр *show\_group*.106107#### `traceback.format_exception(exc, /, [value, tb, ]limit=None, chain=True)`108109Форматирует трассировку стека и информацию об исключении. Аргументы имеют тот же смысл, что и соответствующие аргументы [`print_exception()`](https://python-all.ru/3.15/library/traceback.html#traceback.print_exception). Возвращаемое значение – список строк, каждая заканчивается символом новой строки, некоторые содержат внутренние переводы строк. При объединении и выводе этих строк печатается в точности тот же текст, что и при вызове `print_exception()`.110111Изменено в версии 3.5: Аргумент *etype* игнорируется и определяется по типу *value*.112113Изменено в версии 3.10: Поведение и сигнатура этой функции были изменены в соответствии с [`print_exception()`](https://python-all.ru/3.15/library/traceback.html#traceback.print_exception).114115#### `traceback.format_exc(limit=None, chain=True)`116117Аналог `print_exc(limit)`, но возвращает строку вместо вывода в файл.118119#### `traceback.format_tb(tb, limit=None)`120121Сокращение для `format_list(extract_tb(tb, limit))`.122123#### `traceback.format_stack(f=None, limit=None)`124125Сокращение для `format_list(extract_stack(f, limit))`.126127#### `traceback.clear_frames(tb)`128129Очищает локальные переменные всех фреймов стека в [traceback](https://python-all.ru/3.15/reference/datamodel.html#traceback-objects) *tb*, вызывая метод [`clear()`](https://python-all.ru/3.15/reference/datamodel.html#frame.clear) для каждого [объекта фрейма](https://python-all.ru/3.15/reference/datamodel.html#frame-objects).130131Добавлено в версии 3.4.132133#### `traceback.walk_stack(f)`134135Обходит стек, следуя по [`f.f_back`](https://python-all.ru/3.15/reference/datamodel.html#frame.f_back) от указанного фрейма, возвращая фрейм и номер строки для каждого фрейма. Если *f* равен `None`, используется текущий стек. Эта вспомогательная функция используется с [`StackSummary.extract()`](https://python-all.ru/3.15/library/traceback.html#traceback.StackSummary.extract).136137Добавлено в версии 3.5.138139Изменено в версии 3.14: Ранее эта функция возвращала генератор, который обходил стек при первой итерации. Теперь возвращаемый генератор представляет собой состояние стека на момент вызова `walk_stack`.140141#### `traceback.walk_tb(tb)`142143Обходит трассировку стека, следуя по [`tb_next`](https://python-all.ru/3.15/reference/datamodel.html#traceback.tb_next), возвращая фрейм и номер строки для каждого фрейма. Эта вспомогательная функция используется с [`StackSummary.extract()`](https://python-all.ru/3.15/library/traceback.html#traceback.StackSummary.extract).144145Добавлено в версии 3.5.146147## `TracebackException` Объекты148149Добавлено в версии 3.5.150151Объекты `TracebackException` создаются на основе реальных исключений для захвата данных для последующей печати. Они предоставляют более лёгкий способ хранения этой информации, избегая хранения ссылок на объекты [traceback](https://python-all.ru/3.15/reference/datamodel.html#traceback-objects) и [frame](https://python-all.ru/3.15/reference/datamodel.html#frame-objects). Кроме того, по сравнению с функциями уровня модуля, описанными выше, они предоставляют больше возможностей для настройки вывода.152153#### `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)`154155Захватывает исключение для последующего отображения. Значения *limit*, *lookup\_lines* и *capture\_locals* такие же, как для класса [`StackSummary`](https://python-all.ru/3.15/library/traceback.html#traceback.StackSummary).156157Если *compact* равен true, в атрибутах класса сохраняются только данные, необходимые методу `TracebackException` [`format()`](https://python-all.ru/3.15/library/functions.html#format). В частности, поле [`__context__`](https://python-all.ru/3.15/library/traceback.html#traceback.TracebackException.__context__) вычисляется только если [`__cause__`](https://python-all.ru/3.15/library/traceback.html#traceback.TracebackException.__cause__) равен `None` и [`__suppress_context__`](https://python-all.ru/3.15/library/traceback.html#traceback.TracebackException.__suppress_context__) равен false.158159Обратите внимание, что при захвате локальных переменных они также отображаются в трассировке.160161Параметры *max\_group\_width* и *max\_group\_depth* управляют форматированием групп исключений (см. [`BaseExceptionGroup`](https://python-all.ru/3.15/library/exceptions.html#BaseExceptionGroup)). Глубина относится к уровню вложенности группы, а ширина – к размеру массива исключений одной группы исключений. Отформатированный вывод усекается при превышении любого из этих ограничений.162163Изменено в версии 3.10: Добавлен параметр *compact*.164165Изменено в версии 3.11: Добавлены параметры *max\_group\_width* и *max\_group\_depth*.166167#### `__cause__`168169`TracebackException` исходного [`__cause__`](https://python-all.ru/3.15/library/exceptions.html#BaseException.__cause__).170171#### `__context__`172173`TracebackException` исходного [`__context__`](https://python-all.ru/3.15/library/exceptions.html#BaseException.__context__).174175#### `exceptions`176177Если `self` представляет собой [`ExceptionGroup`](https://python-all.ru/3.15/library/exceptions.html#ExceptionGroup), это поле содержит список экземпляров `TracebackException`, представляющих вложенные исключения. В противном случае это `None`.178179Добавлено в версии 3.12.180181#### `__suppress_context__`182183Значение [`__suppress_context__`](https://python-all.ru/3.15/library/exceptions.html#BaseException.__suppress_context__) из исходного исключения.184185#### `__notes__`186187Значение [`__notes__`](https://python-all.ru/3.15/library/exceptions.html#BaseException.__notes__) из исходного исключения или `None`, если у исключения нет заметок. Если это не `None`, то оно форматируется в трассировке после строки исключения.188189Добавлено в версии 3.12.190191#### `stack`192193[`StackSummary`](https://python-all.ru/3.15/library/traceback.html#traceback.StackSummary), представляющий трассировку.194195#### `exc_type`196197Класс исходного исключения.198199Устарело с версии 3.13.200201#### `exc_type_str`202203Строковое представление класса исходного исключения.204205Добавлено в версии 3.13.206207#### `filename`208209Для синтаксических ошибок – имя файла, в котором произошла ошибка.210211#### `lineno`212213Для синтаксических ошибок – номер строки, в которой произошла ошибка.214215#### `end_lineno`216217Для синтаксических ошибок – номер конечной строки, в которой произошла ошибка. Может быть `None`, если отсутствует.218219Добавлено в версии 3.10.220221#### `text`222223Для синтаксических ошибок – текст, в котором произошла ошибка.224225#### `offset`226227Для синтаксических ошибок – смещение в тексте, где произошла ошибка.228229#### `end_offset`230231Для синтаксических ошибок – конечное смещение в тексте, где произошла ошибка. Может быть `None`, если отсутствует.232233Добавлено в версии 3.10.234235#### `msg`236237Для синтаксических ошибок – сообщение об ошибке компилятора.238239#### `classmethod from_exception(exc, *, limit=None, lookup_lines=True, capture_locals=False, compact=False, max_group_width=15, max_group_depth=10)`240241Захватывает исключение для последующего отображения. Параметры *limit*, *lookup\_lines* и *capture\_locals* такие же, как для класса [`StackSummary`](https://python-all.ru/3.15/library/traceback.html#traceback.StackSummary).242243Обратите внимание, что при захвате локальных переменных они также отображаются в трассировке.244245#### `print(*, file=None, chain=True)`246247Выводит в *file* (по умолчанию `sys.stderr`) информацию об исключении, возвращённую [`format()`](https://python-all.ru/3.15/library/functions.html#format).248249Добавлено в версии 3.12.250251#### `format(*, chain=True)`252253Форматирует исключение.254255Если *chain* не равно `True`, то [`__cause__`](https://python-all.ru/3.15/library/traceback.html#traceback.TracebackException.__cause__) и [`__context__`](https://python-all.ru/3.15/library/traceback.html#traceback.TracebackException.__context__) не будут отформатированы.256257Возвращаемое значение – генератор строк, каждая из которых завершается символом новой строки, и некоторые содержат внутренние переводы строк. [`print_exception()`](https://python-all.ru/3.15/library/traceback.html#traceback.print_exception) является обёрткой вокруг этого метода, которая просто выводит строки в файл.258259#### `format_exception_only(*, show_group=False)`260261Форматирует часть трассировки, относящуюся к исключению.262263Возвращаемое значение – генератор строк, каждая из которых завершается символом новой строки.264265Когда *show\_group* равно `False`, генератор выдаёт сообщение об исключении, за которым следуют его примечания (если они есть). Сообщение об исключении обычно представляет собой одну строку; однако для исключений [`SyntaxError`](https://python-all.ru/3.15/library/exceptions.html#SyntaxError) оно состоит из нескольких строк, которые (при печати) отображают подробную информацию о месте возникновения синтаксической ошибки.266267Когда *show\_group* равно `True` и исключение является экземпляром [`BaseExceptionGroup`](https://python-all.ru/3.15/library/exceptions.html#BaseExceptionGroup), вложенные исключения также включаются рекурсивно с отступами, соответствующими глубине вложенности.268269Изменено в версии 3.11: Примечания исключения ([`notes`](https://python-all.ru/3.15/library/exceptions.html#BaseException.__notes__)) теперь включаются в вывод.270271Изменено в версии 3.13: Добавлен параметр *show\_group*.272273## `StackSummary` Объекты274275Добавлено в версии 3.5.276277Объекты `StackSummary` представляют стек вызовов, готовый к форматированию.278279#### `class traceback.StackSummary`280281#### `classmethod extract(frame_gen, *, limit=None, lookup_lines=True, capture_locals=False)`282283Создаёт объект `StackSummary` из генератора фреймов (такого, как возвращается [`walk_stack()`](https://python-all.ru/3.15/library/traceback.html#traceback.walk_stack) или [`walk_tb()`](https://python-all.ru/3.15/library/traceback.html#traceback.walk_tb)).284285Если указан параметр *limit*, из *frame\_gen* берётся только указанное количество фреймов. Если *lookup\_lines* равно `False`, возвращённые объекты [`FrameSummary`](https://python-all.ru/3.15/library/traceback.html#traceback.FrameSummary) ещё не прочитают свои строки, что удешевляет создание `StackSummary` (это может быть полезно, если он, возможно, не будет фактически отформатирован). Если *capture\_locals* равно `True`, локальные переменные в каждом `FrameSummary` захватываются в виде представления объектов.286287Изменено в версии 3.12: Исключения, возникающие в [`repr()`](https://python-all.ru/3.15/library/functions.html#repr) для локальной переменной (когда *capture\_locals* равно `True`), больше не распространяются на вызывающий код.288289#### `classmethod from_list(a_list)`290291Создаёт объект `StackSummary` из предоставленного списка объектов [`FrameSummary`](https://python-all.ru/3.15/library/traceback.html#traceback.FrameSummary) или списка кортежей старого образца. Каждый кортеж должен быть кортежем из 4 элементов: *filename*, *lineno*, *name*, *line*.292293#### `format()`294295Возвращает список строк, готовых к печати. Каждая строка в результирующем списке соответствует одному [фрейму](https://python-all.ru/3.15/reference/datamodel.html#frame-objects) из стека. Каждая строка заканчивается символом новой строки; строки также могут содержать внутренние переводы строк – для тех элементов, у которых есть строки исходного кода.296297Для длинных последовательностей одинаковых фреймов и строк сначала показываются первые несколько повторений, а затем сводная строка с указанием точного числа последующих повторений.298299Изменено в версии 3.6: Длинные последовательности повторяющихся фреймов теперь сокращаются.300301#### `format_frame_summary(frame_summary)`302303Возвращает строку для печати одного из [фреймов](https://python-all.ru/3.15/reference/datamodel.html#frame-objects), входящих в стек. Этот метод вызывается для каждого объекта [`FrameSummary`](https://python-all.ru/3.15/library/traceback.html#traceback.FrameSummary), который должен быть выведен методом [`StackSummary.format()`](https://python-all.ru/3.15/library/traceback.html#traceback.StackSummary.format). Если он возвращает `None`, то фрейм пропускается в выводе.304305Добавлено в версии 3.12.306307## `FrameSummary` Объекты308309Добавлено в версии 3.5.310311Объект `FrameSummary` представляет отдельный [фрейм](https://python-all.ru/3.15/reference/datamodel.html#frame-objects) в [трассировке](https://python-all.ru/3.15/reference/datamodel.html#traceback-objects).312313#### `class traceback.FrameSummary(filename, lineno, name, *, lookup_line=True, locals=None, line=None, end_lineno=None, colno=None, end_colno=None)`314315Представляет отдельный [фрейм](https://python-all.ru/3.15/reference/datamodel.html#frame-objects) в [трассировке](https://python-all.ru/3.15/reference/datamodel.html#traceback-objects) или стеке, который форматируется или выводится. Он может опционально содержать строковое представление локальных переменных фрейма. Если *lookup\_line* равно `False`, исходный код не запрашивается до тех пор, пока у `FrameSummary` не будет получен доступ к атрибуту [`line`](https://python-all.ru/3.15/library/traceback.html#traceback.FrameSummary.line) (что также происходит при приведении его к [`tuple`](https://python-all.ru/3.15/library/stdtypes.html#tuple)). `line` может быть передан напрямую, что предотвратит любой поиск строк. *locals* – необязательное отображение локальных переменных; если оно предоставлено, представления переменных сохраняются в сводке для последующего отображения.316317Экземпляры `FrameSummary` имеют следующие атрибуты:318319#### `filename`320321Имя файла исходного кода для этого фрейма. Эквивалентно обращению к [`f.f_code.co_filename`](https://python-all.ru/3.15/reference/datamodel.html#codeobject.co_filename) для [объекта фрейма](https://python-all.ru/3.15/reference/datamodel.html#frame-objects) *f*.322323#### `lineno`324325Номер строки исходного кода для этого фрейма.326327#### `name`328329Эквивалентно обращению к [`f.f_code.co_name`](https://python-all.ru/3.15/reference/datamodel.html#codeobject.co_name) на [объекте кадра](https://python-all.ru/3.15/reference/datamodel.html#frame-objects) *f*.330331#### `line`332333Строка, представляющая исходный код для этого кадра, с удалёнными начальными и конечными пробелами. Если исходный код недоступен, это `None`.334335#### `end_lineno`336337Номер последней строки исходного кода для этого кадра. По умолчанию он равен `lineno`, а нумерация начинается с 1.338339Изменено в версии 3.13: значение по умолчанию изменилось с `None` на `lineno`.340341#### `colno`342343Номер колонки исходного кода для этого кадра. По умолчанию он равен `None`, а нумерация начинается с 0.344345#### `end_colno`346347Номер последней колонки исходного кода для этого кадра. По умолчанию он равен `None`, а нумерация начинается с 0.348349## Примеры использования функций уровня модуля350351Этот простой пример реализует базовый цикл чтение-вычисление-печать, похожий на (но менее полезный, чем) стандартный цикл интерактивного интерпретатора Python. Для более полной реализации цикла интерпретатора обратитесь к модулю [`code`](https://python-all.ru/3.15/library/code.html#module-code).352353```python354import sys, traceback355356def run_user_code(envdir):357    source = input(">>> ")358    try:359        exec(source, envdir)360    except Exception:361        print("Exception in user code:")362        print("-"*60)363        traceback.print_exc(file=sys.stdout)364        print("-"*60)365366envdir = {}367while True:368    run_user_code(envdir)369```370371Следующий пример демонстрирует различные способы вывода и форматирования исключения и трассировки:372373```python374import sys, traceback375376def lumberjack():377    bright_side_of_life()378379def bright_side_of_life():380    return tuple()[0]381382try:383    lumberjack()384except IndexError as exc:385    print("*** print_tb:")386    traceback.print_tb(exc.__traceback__, limit=1, file=sys.stdout)387    print("*** print_exception:")388    traceback.print_exception(exc, limit=2, file=sys.stdout)389    print("*** print_exc:")390    traceback.print_exc(limit=2, file=sys.stdout)391    print("*** format_exc, first and last line:")392    formatted_lines = traceback.format_exc().splitlines()393    print(formatted_lines[0])394    print(formatted_lines[-1])395    print("*** format_exception:")396    print(repr(traceback.format_exception(exc)))397    print("*** extract_tb:")398    print(repr(traceback.extract_tb(exc.__traceback__)))399    print("*** format_tb:")400    print(repr(traceback.format_tb(exc.__traceback__)))401    print("*** tb_lineno:", exc.__traceback__.tb_lineno)402```403404Вывод для примера будет выглядеть примерно так:405406```text407*** print_tb:408  File "<doctest...>", line 10, in <module>409    lumberjack()410    ~~~~~~~~~~^^411*** print_exception:412Traceback (most recent call last):413  File "<doctest...>", line 10, in <module>414    lumberjack()415    ~~~~~~~~~~^^416  File "<doctest...>", line 4, in lumberjack417    bright_side_of_life()418    ~~~~~~~~~~~~~~~~~~~^^419IndexError: tuple index out of range420*** print_exc:421Traceback (most recent call last):422  File "<doctest...>", line 10, in <module>423    lumberjack()424    ~~~~~~~~~~^^425  File "<doctest...>", line 4, in lumberjack426    bright_side_of_life()427    ~~~~~~~~~~~~~~~~~~~^^428IndexError: tuple index out of range429*** format_exc, first and last line:430Traceback (most recent call last):431IndexError: tuple index out of range432*** format_exception:433['Traceback (most recent call last):\n',434 '  File "<doctest default[0]>", line 10, in <module>\n    lumberjack()\n    ~~~~~~~~~~^^\n',435 '  File "<doctest default[0]>", line 4, in lumberjack\n    bright_side_of_life()\n    ~~~~~~~~~~~~~~~~~~~^^\n',436 '  File "<doctest default[0]>", line 7, in bright_side_of_life\n    return tuple()[0]\n           ~~~~~~~^^^\n',437 'IndexError: tuple index out of range\n']438*** extract_tb:439[<FrameSummary file <doctest...>, line 10 in <module>>,440 <FrameSummary file <doctest...>, line 4 in lumberjack>,441 <FrameSummary file <doctest...>, line 7 in bright_side_of_life>]442*** format_tb:443['  File "<doctest default[0]>", line 10, in <module>\n    lumberjack()\n    ~~~~~~~~~~^^\n',444 '  File "<doctest default[0]>", line 4, in lumberjack\n    bright_side_of_life()\n    ~~~~~~~~~~~~~~~~~~~^^\n',445 '  File "<doctest default[0]>", line 7, in bright_side_of_life\n    return tuple()[0]\n           ~~~~~~~^^^\n']446*** tb_lineno: 10447```448449Следующий пример показывает различные способы вывода и форматирования стека:450451```python452>>> import traceback453>>> def another_function():454...     lumberstack()455...456>>> def lumberstack():457...     traceback.print_stack()458...     print(repr(traceback.extract_stack()))459...     print(repr(traceback.format_stack()))460...461>>> another_function()462  File "<doctest>", line 10, in <module>463    another_function()464  File "<doctest>", line 3, in another_function465    lumberstack()466  File "<doctest>", line 6, in lumberstack467    traceback.print_stack()468[('<doctest>', 10, '<module>', 'another_function()'),469 ('<doctest>', 3, 'another_function', 'lumberstack()'),470 ('<doctest>', 7, 'lumberstack', 'print(repr(traceback.extract_stack()))')]471['  File "<doctest>", line 10, in <module>\n    another_function()\n',472 '  File "<doctest>", line 3, in another_function\n    lumberstack()\n',473 '  File "<doctest>", line 8, in lumberstack\n    print(repr(traceback.format_stack()))\n']474```475476Этот последний пример демонстрирует несколько последних функций форматирования:477478```pycon479>>> import traceback480>>> traceback.format_list([('spam.py', 3, '<module>', 'spam.eggs()'),481...                        ('eggs.py', 42, 'eggs', 'return "bacon"')])482['  File "spam.py", line 3, in <module>\n    spam.eggs()\n',483 '  File "eggs.py", line 42, in eggs\n    return "bacon"\n']484>>> an_error = IndexError('tuple index out of range')485>>> traceback.format_exception_only(an_error)486['IndexError: tuple index out of range\n']487```488489## Примеры использования [`TracebackException`](https://python-all.ru/3.15/library/traceback.html#traceback.TracebackException)490491С помощью вспомогательного класса появляется больше возможностей:492493```python494>>> import sys495>>> from traceback import TracebackException496>>>497>>> def lumberjack():498...     bright_side_of_life()499...500>>> def bright_side_of_life():501...     t = "bright", "side", "of", "life"502...     return t[5]503...504>>> try:505...     lumberjack()506... except IndexError as e:507...     exc = e508...509>>> try:510...     try:511...         lumberjack()512...     except:513...         1/0514... except Exception as e:515...     chained_exc = e516...517>>> # limit работает, как и функции уровня модуля518>>> TracebackException.from_exception(exc, limit=-2).print()519Traceback (most recent call last):520  File "<python-input-1>", line 6, in lumberjack521    bright_side_of_life()522    ~~~~~~~~~~~~~~~~~~~^^523  File "<python-input-1>", line 10, in bright_side_of_life524    return t[5]525           ~^^^526IndexError: tuple index out of range527528>>> # capture_locals добавляет локальные переменные в кадры стека529>>> TracebackException.from_exception(exc, limit=-2, capture_locals=True).print()530Traceback (most recent call last):531  File "<python-input-1>", line 6, in lumberjack532    bright_side_of_life()533    ~~~~~~~~~~~~~~~~~~~^^534  File "<python-input-1>", line 10, in bright_side_of_life535    return t[5]536           ~^^^537    t = ("bright", "side", "of", "life")538IndexError: tuple index out of range539540>>> # Именованный аргумент *chain* в print() управляет тем, показываются ли цепочки541>>> # исключений.542>>> TracebackException.from_exception(chained_exc).print()543Traceback (most recent call last):544  File "<python-input-19>", line 4, in <module>545    lumberjack()546    ~~~~~~~~~~^^547  File "<python-input-8>", line 7, in lumberjack548    bright_side_of_life()549    ~~~~~~~~~~~~~~~~~~~^^550  File "<python-input-8>", line 11, in bright_side_of_life551    return t[5]552           ~^^^553IndexError: tuple index out of range554555During handling of the above exception, another exception occurred:556557Traceback (most recent call last):558  File "<python-input-19>", line 6, in <module>559    1/0560    ~^~561ZeroDivisionError: division by zero562563>>> TracebackException.from_exception(chained_exc).print(chain=False)564Traceback (most recent call last):565  File "<python-input-19>", line 6, in <module>566    1/0567    ~^~568ZeroDivisionError: division by zero569```570