17db96d56Sopenharmony_ci:mod:`traceback` --- Print or retrieve a stack traceback 27db96d56Sopenharmony_ci======================================================== 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: traceback 57db96d56Sopenharmony_ci :synopsis: Print or retrieve a stack traceback. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci**Source code:** :source:`Lib/traceback.py` 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci-------------- 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ciThis module provides a standard interface to extract, format and print stack 127db96d56Sopenharmony_citraces of Python programs. It exactly mimics the behavior of the Python 137db96d56Sopenharmony_ciinterpreter when it prints a stack trace. This is useful when you want to print 147db96d56Sopenharmony_cistack traces under program control, such as in a "wrapper" around the 157db96d56Sopenharmony_ciinterpreter. 167db96d56Sopenharmony_ci 177db96d56Sopenharmony_ci.. index:: pair: object; traceback 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ciThe module uses traceback objects --- these are objects of type :class:`types.TracebackType`, 207db96d56Sopenharmony_ciwhich are assigned to the ``__traceback__`` field of :class:`BaseException` instances. 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ci.. seealso:: 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci Module :mod:`faulthandler` 257db96d56Sopenharmony_ci Used to dump Python tracebacks explicitly, on a fault, after a timeout, or on a user signal. 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ci Module :mod:`pdb` 287db96d56Sopenharmony_ci Interactive source code debugger for Python programs. 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ciThe module defines the following functions: 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci.. function:: print_tb(tb, limit=None, file=None) 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci Print up to *limit* stack trace entries from traceback object *tb* (starting 357db96d56Sopenharmony_ci from the caller's frame) if *limit* is positive. Otherwise, print the last 367db96d56Sopenharmony_ci ``abs(limit)`` entries. If *limit* is omitted or ``None``, all entries are 377db96d56Sopenharmony_ci printed. If *file* is omitted or ``None``, the output goes to 387db96d56Sopenharmony_ci ``sys.stderr``; otherwise it should be an open file or file-like object to 397db96d56Sopenharmony_ci receive the output. 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci .. versionchanged:: 3.5 427db96d56Sopenharmony_ci Added negative *limit* support. 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci.. function:: print_exception(exc, /[, value, tb], limit=None, \ 467db96d56Sopenharmony_ci file=None, chain=True) 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci Print exception information and stack trace entries from traceback object 497db96d56Sopenharmony_ci *tb* to *file*. This differs from :func:`print_tb` in the following 507db96d56Sopenharmony_ci ways: 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci * if *tb* is not ``None``, it prints a header ``Traceback (most recent 537db96d56Sopenharmony_ci call last):`` 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_ci * it prints the exception type and *value* after the stack trace 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ci .. index:: single: ^ (caret); marker 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ci * if *type(value)* is :exc:`SyntaxError` and *value* has the appropriate 607db96d56Sopenharmony_ci format, it prints the line where the syntax error occurred with a caret 617db96d56Sopenharmony_ci indicating the approximate position of the error. 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci Since Python 3.10, instead of passing *value* and *tb*, an exception object 647db96d56Sopenharmony_ci can be passed as the first argument. If *value* and *tb* are provided, the 657db96d56Sopenharmony_ci first argument is ignored in order to provide backwards compatibility. 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci The optional *limit* argument has the same meaning as for :func:`print_tb`. 687db96d56Sopenharmony_ci If *chain* is true (the default), then chained exceptions (the 697db96d56Sopenharmony_ci :attr:`__cause__` or :attr:`__context__` attributes of the exception) will be 707db96d56Sopenharmony_ci printed as well, like the interpreter itself does when printing an unhandled 717db96d56Sopenharmony_ci exception. 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci .. versionchanged:: 3.5 747db96d56Sopenharmony_ci The *etype* argument is ignored and inferred from the type of *value*. 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci .. versionchanged:: 3.10 777db96d56Sopenharmony_ci The *etype* parameter has been renamed to *exc* and is now 787db96d56Sopenharmony_ci positional-only. 797db96d56Sopenharmony_ci 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci.. function:: print_exc(limit=None, file=None, chain=True) 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci This is a shorthand for ``print_exception(sys.exception(), limit, file, 847db96d56Sopenharmony_ci chain)``. 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci.. function:: print_last(limit=None, file=None, chain=True) 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci This is a shorthand for ``print_exception(sys.last_type, sys.last_value, 907db96d56Sopenharmony_ci sys.last_traceback, limit, file, chain)``. In general it will work only 917db96d56Sopenharmony_ci after an exception has reached an interactive prompt (see 927db96d56Sopenharmony_ci :data:`sys.last_type`). 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci 957db96d56Sopenharmony_ci.. function:: print_stack(f=None, limit=None, file=None) 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_ci Print up to *limit* stack trace entries (starting from the invocation 987db96d56Sopenharmony_ci point) if *limit* is positive. Otherwise, print the last ``abs(limit)`` 997db96d56Sopenharmony_ci entries. If *limit* is omitted or ``None``, all entries are printed. 1007db96d56Sopenharmony_ci The optional *f* argument can be used to specify an alternate stack frame 1017db96d56Sopenharmony_ci to start. The optional *file* argument has the same meaning as for 1027db96d56Sopenharmony_ci :func:`print_tb`. 1037db96d56Sopenharmony_ci 1047db96d56Sopenharmony_ci .. versionchanged:: 3.5 1057db96d56Sopenharmony_ci Added negative *limit* support. 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ci.. function:: extract_tb(tb, limit=None) 1097db96d56Sopenharmony_ci 1107db96d56Sopenharmony_ci Return a :class:`StackSummary` object representing a list of "pre-processed" 1117db96d56Sopenharmony_ci stack trace entries extracted from the traceback object *tb*. It is useful 1127db96d56Sopenharmony_ci for alternate formatting of stack traces. The optional *limit* argument has 1137db96d56Sopenharmony_ci the same meaning as for :func:`print_tb`. A "pre-processed" stack trace 1147db96d56Sopenharmony_ci entry is a :class:`FrameSummary` object containing attributes 1157db96d56Sopenharmony_ci :attr:`~FrameSummary.filename`, :attr:`~FrameSummary.lineno`, 1167db96d56Sopenharmony_ci :attr:`~FrameSummary.name`, and :attr:`~FrameSummary.line` representing the 1177db96d56Sopenharmony_ci information that is usually printed for a stack trace. The 1187db96d56Sopenharmony_ci :attr:`~FrameSummary.line` is a string with leading and trailing 1197db96d56Sopenharmony_ci whitespace stripped; if the source is not available it is ``None``. 1207db96d56Sopenharmony_ci 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci.. function:: extract_stack(f=None, limit=None) 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_ci Extract the raw traceback from the current stack frame. The return value has 1257db96d56Sopenharmony_ci the same format as for :func:`extract_tb`. The optional *f* and *limit* 1267db96d56Sopenharmony_ci arguments have the same meaning as for :func:`print_stack`. 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci 1297db96d56Sopenharmony_ci.. function:: format_list(extracted_list) 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci Given a list of tuples or :class:`FrameSummary` objects as returned by 1327db96d56Sopenharmony_ci :func:`extract_tb` or :func:`extract_stack`, return a list of strings ready 1337db96d56Sopenharmony_ci for printing. Each string in the resulting list corresponds to the item with 1347db96d56Sopenharmony_ci the same index in the argument list. Each string ends in a newline; the 1357db96d56Sopenharmony_ci strings may contain internal newlines as well, for those items whose source 1367db96d56Sopenharmony_ci text line is not ``None``. 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_ci 1397db96d56Sopenharmony_ci.. function:: format_exception_only(exc, /[, value]) 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci Format the exception part of a traceback using an exception value such as 1427db96d56Sopenharmony_ci given by ``sys.last_value``. The return value is a list of strings, each 1437db96d56Sopenharmony_ci ending in a newline. Normally, the list contains a single string; however, 1447db96d56Sopenharmony_ci for :exc:`SyntaxError` exceptions, it contains several lines that (when 1457db96d56Sopenharmony_ci printed) display detailed information about where the syntax error occurred. 1467db96d56Sopenharmony_ci The message indicating which exception occurred is the always last string in 1477db96d56Sopenharmony_ci the list. 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ci Since Python 3.10, instead of passing *value*, an exception object 1507db96d56Sopenharmony_ci can be passed as the first argument. If *value* is provided, the first 1517db96d56Sopenharmony_ci argument is ignored in order to provide backwards compatibility. 1527db96d56Sopenharmony_ci 1537db96d56Sopenharmony_ci .. versionchanged:: 3.10 1547db96d56Sopenharmony_ci The *etype* parameter has been renamed to *exc* and is now 1557db96d56Sopenharmony_ci positional-only. 1567db96d56Sopenharmony_ci 1577db96d56Sopenharmony_ci 1587db96d56Sopenharmony_ci.. function:: format_exception(exc, /[, value, tb], limit=None, chain=True) 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci Format a stack trace and the exception information. The arguments have the 1617db96d56Sopenharmony_ci same meaning as the corresponding arguments to :func:`print_exception`. The 1627db96d56Sopenharmony_ci return value is a list of strings, each ending in a newline and some 1637db96d56Sopenharmony_ci containing internal newlines. When these lines are concatenated and printed, 1647db96d56Sopenharmony_ci exactly the same text is printed as does :func:`print_exception`. 1657db96d56Sopenharmony_ci 1667db96d56Sopenharmony_ci .. versionchanged:: 3.5 1677db96d56Sopenharmony_ci The *etype* argument is ignored and inferred from the type of *value*. 1687db96d56Sopenharmony_ci 1697db96d56Sopenharmony_ci .. versionchanged:: 3.10 1707db96d56Sopenharmony_ci This function's behavior and signature were modified to match 1717db96d56Sopenharmony_ci :func:`print_exception`. 1727db96d56Sopenharmony_ci 1737db96d56Sopenharmony_ci 1747db96d56Sopenharmony_ci.. function:: format_exc(limit=None, chain=True) 1757db96d56Sopenharmony_ci 1767db96d56Sopenharmony_ci This is like ``print_exc(limit)`` but returns a string instead of printing to 1777db96d56Sopenharmony_ci a file. 1787db96d56Sopenharmony_ci 1797db96d56Sopenharmony_ci 1807db96d56Sopenharmony_ci.. function:: format_tb(tb, limit=None) 1817db96d56Sopenharmony_ci 1827db96d56Sopenharmony_ci A shorthand for ``format_list(extract_tb(tb, limit))``. 1837db96d56Sopenharmony_ci 1847db96d56Sopenharmony_ci 1857db96d56Sopenharmony_ci.. function:: format_stack(f=None, limit=None) 1867db96d56Sopenharmony_ci 1877db96d56Sopenharmony_ci A shorthand for ``format_list(extract_stack(f, limit))``. 1887db96d56Sopenharmony_ci 1897db96d56Sopenharmony_ci.. function:: clear_frames(tb) 1907db96d56Sopenharmony_ci 1917db96d56Sopenharmony_ci Clears the local variables of all the stack frames in a traceback *tb* 1927db96d56Sopenharmony_ci by calling the :meth:`clear` method of each frame object. 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci .. versionadded:: 3.4 1957db96d56Sopenharmony_ci 1967db96d56Sopenharmony_ci.. function:: walk_stack(f) 1977db96d56Sopenharmony_ci 1987db96d56Sopenharmony_ci Walk a stack following ``f.f_back`` from the given frame, yielding the frame 1997db96d56Sopenharmony_ci and line number for each frame. If *f* is ``None``, the current stack is 2007db96d56Sopenharmony_ci used. This helper is used with :meth:`StackSummary.extract`. 2017db96d56Sopenharmony_ci 2027db96d56Sopenharmony_ci .. versionadded:: 3.5 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci.. function:: walk_tb(tb) 2057db96d56Sopenharmony_ci 2067db96d56Sopenharmony_ci Walk a traceback following ``tb_next`` yielding the frame and line number 2077db96d56Sopenharmony_ci for each frame. This helper is used with :meth:`StackSummary.extract`. 2087db96d56Sopenharmony_ci 2097db96d56Sopenharmony_ci .. versionadded:: 3.5 2107db96d56Sopenharmony_ci 2117db96d56Sopenharmony_ciThe module also defines the following classes: 2127db96d56Sopenharmony_ci 2137db96d56Sopenharmony_ci:class:`TracebackException` Objects 2147db96d56Sopenharmony_ci----------------------------------- 2157db96d56Sopenharmony_ci 2167db96d56Sopenharmony_ci.. versionadded:: 3.5 2177db96d56Sopenharmony_ci 2187db96d56Sopenharmony_ci:class:`TracebackException` objects are created from actual exceptions to 2197db96d56Sopenharmony_cicapture data for later printing in a lightweight fashion. 2207db96d56Sopenharmony_ci 2217db96d56Sopenharmony_ci.. class:: 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) 2227db96d56Sopenharmony_ci 2237db96d56Sopenharmony_ci Capture an exception for later rendering. *limit*, *lookup_lines* and 2247db96d56Sopenharmony_ci *capture_locals* are as for the :class:`StackSummary` class. 2257db96d56Sopenharmony_ci 2267db96d56Sopenharmony_ci If *compact* is true, only data that is required by :class:`TracebackException`'s 2277db96d56Sopenharmony_ci ``format`` method is saved in the class attributes. In particular, the 2287db96d56Sopenharmony_ci ``__context__`` field is calculated only if ``__cause__`` is ``None`` and 2297db96d56Sopenharmony_ci ``__suppress_context__`` is false. 2307db96d56Sopenharmony_ci 2317db96d56Sopenharmony_ci Note that when locals are captured, they are also shown in the traceback. 2327db96d56Sopenharmony_ci 2337db96d56Sopenharmony_ci *max_group_width* and *max_group_depth* control the formatting of exception 2347db96d56Sopenharmony_ci groups (see :exc:`BaseExceptionGroup`). The depth refers to the nesting 2357db96d56Sopenharmony_ci level of the group, and the width refers to the size of a single exception 2367db96d56Sopenharmony_ci group's exceptions array. The formatted output is truncated when either 2377db96d56Sopenharmony_ci limit is exceeded. 2387db96d56Sopenharmony_ci 2397db96d56Sopenharmony_ci .. attribute:: __cause__ 2407db96d56Sopenharmony_ci 2417db96d56Sopenharmony_ci A :class:`TracebackException` of the original ``__cause__``. 2427db96d56Sopenharmony_ci 2437db96d56Sopenharmony_ci .. attribute:: __context__ 2447db96d56Sopenharmony_ci 2457db96d56Sopenharmony_ci A :class:`TracebackException` of the original ``__context__``. 2467db96d56Sopenharmony_ci 2477db96d56Sopenharmony_ci .. attribute:: exceptions 2487db96d56Sopenharmony_ci 2497db96d56Sopenharmony_ci If ``self`` represents an :exc:`ExceptionGroup`, this field holds a list of 2507db96d56Sopenharmony_ci :class:`TracebackException` instances representing the nested exceptions. 2517db96d56Sopenharmony_ci Otherwise it is ``None``. 2527db96d56Sopenharmony_ci 2537db96d56Sopenharmony_ci .. versionadded:: 3.11 2547db96d56Sopenharmony_ci 2557db96d56Sopenharmony_ci .. attribute:: __suppress_context__ 2567db96d56Sopenharmony_ci 2577db96d56Sopenharmony_ci The ``__suppress_context__`` value from the original exception. 2587db96d56Sopenharmony_ci 2597db96d56Sopenharmony_ci .. attribute:: __notes__ 2607db96d56Sopenharmony_ci 2617db96d56Sopenharmony_ci The ``__notes__`` value from the original exception, or ``None`` 2627db96d56Sopenharmony_ci if the exception does not have any notes. If it is not ``None`` 2637db96d56Sopenharmony_ci is it formatted in the traceback after the exception string. 2647db96d56Sopenharmony_ci 2657db96d56Sopenharmony_ci .. versionadded:: 3.11 2667db96d56Sopenharmony_ci 2677db96d56Sopenharmony_ci .. attribute:: stack 2687db96d56Sopenharmony_ci 2697db96d56Sopenharmony_ci A :class:`StackSummary` representing the traceback. 2707db96d56Sopenharmony_ci 2717db96d56Sopenharmony_ci .. attribute:: exc_type 2727db96d56Sopenharmony_ci 2737db96d56Sopenharmony_ci The class of the original traceback. 2747db96d56Sopenharmony_ci 2757db96d56Sopenharmony_ci .. attribute:: filename 2767db96d56Sopenharmony_ci 2777db96d56Sopenharmony_ci For syntax errors - the file name where the error occurred. 2787db96d56Sopenharmony_ci 2797db96d56Sopenharmony_ci .. attribute:: lineno 2807db96d56Sopenharmony_ci 2817db96d56Sopenharmony_ci For syntax errors - the line number where the error occurred. 2827db96d56Sopenharmony_ci 2837db96d56Sopenharmony_ci .. attribute:: end_lineno 2847db96d56Sopenharmony_ci 2857db96d56Sopenharmony_ci For syntax errors - the end line number where the error occurred. 2867db96d56Sopenharmony_ci Can be ``None`` if not present. 2877db96d56Sopenharmony_ci 2887db96d56Sopenharmony_ci .. versionadded:: 3.10 2897db96d56Sopenharmony_ci 2907db96d56Sopenharmony_ci .. attribute:: text 2917db96d56Sopenharmony_ci 2927db96d56Sopenharmony_ci For syntax errors - the text where the error occurred. 2937db96d56Sopenharmony_ci 2947db96d56Sopenharmony_ci .. attribute:: offset 2957db96d56Sopenharmony_ci 2967db96d56Sopenharmony_ci For syntax errors - the offset into the text where the error occurred. 2977db96d56Sopenharmony_ci 2987db96d56Sopenharmony_ci .. attribute:: end_offset 2997db96d56Sopenharmony_ci 3007db96d56Sopenharmony_ci For syntax errors - the end offset into the text where the error occurred. 3017db96d56Sopenharmony_ci Can be ``None`` if not present. 3027db96d56Sopenharmony_ci 3037db96d56Sopenharmony_ci .. versionadded:: 3.10 3047db96d56Sopenharmony_ci 3057db96d56Sopenharmony_ci .. attribute:: msg 3067db96d56Sopenharmony_ci 3077db96d56Sopenharmony_ci For syntax errors - the compiler error message. 3087db96d56Sopenharmony_ci 3097db96d56Sopenharmony_ci .. classmethod:: from_exception(exc, *, limit=None, lookup_lines=True, capture_locals=False) 3107db96d56Sopenharmony_ci 3117db96d56Sopenharmony_ci Capture an exception for later rendering. *limit*, *lookup_lines* and 3127db96d56Sopenharmony_ci *capture_locals* are as for the :class:`StackSummary` class. 3137db96d56Sopenharmony_ci 3147db96d56Sopenharmony_ci Note that when locals are captured, they are also shown in the traceback. 3157db96d56Sopenharmony_ci 3167db96d56Sopenharmony_ci .. method:: print(*, file=None, chain=True) 3177db96d56Sopenharmony_ci 3187db96d56Sopenharmony_ci Print to *file* (default ``sys.stderr``) the exception information returned by 3197db96d56Sopenharmony_ci :meth:`format`. 3207db96d56Sopenharmony_ci 3217db96d56Sopenharmony_ci .. versionadded:: 3.11 3227db96d56Sopenharmony_ci 3237db96d56Sopenharmony_ci .. method:: format(*, chain=True) 3247db96d56Sopenharmony_ci 3257db96d56Sopenharmony_ci Format the exception. 3267db96d56Sopenharmony_ci 3277db96d56Sopenharmony_ci If *chain* is not ``True``, ``__cause__`` and ``__context__`` will not 3287db96d56Sopenharmony_ci be formatted. 3297db96d56Sopenharmony_ci 3307db96d56Sopenharmony_ci The return value is a generator of strings, each ending in a newline and 3317db96d56Sopenharmony_ci some containing internal newlines. :func:`~traceback.print_exception` 3327db96d56Sopenharmony_ci is a wrapper around this method which just prints the lines to a file. 3337db96d56Sopenharmony_ci 3347db96d56Sopenharmony_ci The message indicating which exception occurred is always the last 3357db96d56Sopenharmony_ci string in the output. 3367db96d56Sopenharmony_ci 3377db96d56Sopenharmony_ci .. method:: format_exception_only() 3387db96d56Sopenharmony_ci 3397db96d56Sopenharmony_ci Format the exception part of the traceback. 3407db96d56Sopenharmony_ci 3417db96d56Sopenharmony_ci The return value is a generator of strings, each ending in a newline. 3427db96d56Sopenharmony_ci 3437db96d56Sopenharmony_ci Normally, the generator emits a single string; however, for 3447db96d56Sopenharmony_ci :exc:`SyntaxError` exceptions, it emits several lines that (when 3457db96d56Sopenharmony_ci printed) display detailed information about where the syntax 3467db96d56Sopenharmony_ci error occurred. 3477db96d56Sopenharmony_ci 3487db96d56Sopenharmony_ci The message indicating which exception occurred is always the last 3497db96d56Sopenharmony_ci string in the output. 3507db96d56Sopenharmony_ci 3517db96d56Sopenharmony_ci .. versionchanged:: 3.10 3527db96d56Sopenharmony_ci Added the *compact* parameter. 3537db96d56Sopenharmony_ci 3547db96d56Sopenharmony_ci .. versionchanged:: 3.11 3557db96d56Sopenharmony_ci Added the *max_group_width* and *max_group_depth* parameters. 3567db96d56Sopenharmony_ci 3577db96d56Sopenharmony_ci 3587db96d56Sopenharmony_ci:class:`StackSummary` Objects 3597db96d56Sopenharmony_ci----------------------------- 3607db96d56Sopenharmony_ci 3617db96d56Sopenharmony_ci.. versionadded:: 3.5 3627db96d56Sopenharmony_ci 3637db96d56Sopenharmony_ci:class:`StackSummary` objects represent a call stack ready for formatting. 3647db96d56Sopenharmony_ci 3657db96d56Sopenharmony_ci.. class:: StackSummary 3667db96d56Sopenharmony_ci 3677db96d56Sopenharmony_ci .. classmethod:: extract(frame_gen, *, limit=None, lookup_lines=True, capture_locals=False) 3687db96d56Sopenharmony_ci 3697db96d56Sopenharmony_ci Construct a :class:`StackSummary` object from a frame generator (such as 3707db96d56Sopenharmony_ci is returned by :func:`~traceback.walk_stack` or 3717db96d56Sopenharmony_ci :func:`~traceback.walk_tb`). 3727db96d56Sopenharmony_ci 3737db96d56Sopenharmony_ci If *limit* is supplied, only this many frames are taken from *frame_gen*. 3747db96d56Sopenharmony_ci If *lookup_lines* is ``False``, the returned :class:`FrameSummary` 3757db96d56Sopenharmony_ci objects will not have read their lines in yet, making the cost of 3767db96d56Sopenharmony_ci creating the :class:`StackSummary` cheaper (which may be valuable if it 3777db96d56Sopenharmony_ci may not actually get formatted). If *capture_locals* is ``True`` the 3787db96d56Sopenharmony_ci local variables in each :class:`FrameSummary` are captured as object 3797db96d56Sopenharmony_ci representations. 3807db96d56Sopenharmony_ci 3817db96d56Sopenharmony_ci .. classmethod:: from_list(a_list) 3827db96d56Sopenharmony_ci 3837db96d56Sopenharmony_ci Construct a :class:`StackSummary` object from a supplied list of 3847db96d56Sopenharmony_ci :class:`FrameSummary` objects or old-style list of tuples. Each tuple 3857db96d56Sopenharmony_ci should be a 4-tuple with filename, lineno, name, line as the elements. 3867db96d56Sopenharmony_ci 3877db96d56Sopenharmony_ci .. method:: format() 3887db96d56Sopenharmony_ci 3897db96d56Sopenharmony_ci Returns a list of strings ready for printing. Each string in the 3907db96d56Sopenharmony_ci resulting list corresponds to a single frame from the stack. 3917db96d56Sopenharmony_ci Each string ends in a newline; the strings may contain internal 3927db96d56Sopenharmony_ci newlines as well, for those items with source text lines. 3937db96d56Sopenharmony_ci 3947db96d56Sopenharmony_ci For long sequences of the same frame and line, the first few 3957db96d56Sopenharmony_ci repetitions are shown, followed by a summary line stating the exact 3967db96d56Sopenharmony_ci number of further repetitions. 3977db96d56Sopenharmony_ci 3987db96d56Sopenharmony_ci .. versionchanged:: 3.6 3997db96d56Sopenharmony_ci Long sequences of repeated frames are now abbreviated. 4007db96d56Sopenharmony_ci 4017db96d56Sopenharmony_ci .. method:: format_frame_summary(frame_summary) 4027db96d56Sopenharmony_ci 4037db96d56Sopenharmony_ci Returns a string for printing one of the frames involved in the stack. 4047db96d56Sopenharmony_ci This method is called for each :class:`FrameSummary` object to be 4057db96d56Sopenharmony_ci printed by :meth:`StackSummary.format`. If it returns ``None``, the 4067db96d56Sopenharmony_ci frame is omitted from the output. 4077db96d56Sopenharmony_ci 4087db96d56Sopenharmony_ci .. versionadded:: 3.11 4097db96d56Sopenharmony_ci 4107db96d56Sopenharmony_ci 4117db96d56Sopenharmony_ci:class:`FrameSummary` Objects 4127db96d56Sopenharmony_ci----------------------------- 4137db96d56Sopenharmony_ci 4147db96d56Sopenharmony_ci.. versionadded:: 3.5 4157db96d56Sopenharmony_ci 4167db96d56Sopenharmony_ciA :class:`FrameSummary` object represents a single frame in a traceback. 4177db96d56Sopenharmony_ci 4187db96d56Sopenharmony_ci.. class:: FrameSummary(filename, lineno, name, lookup_line=True, locals=None, line=None) 4197db96d56Sopenharmony_ci 4207db96d56Sopenharmony_ci Represent a single frame in the traceback or stack that is being formatted 4217db96d56Sopenharmony_ci or printed. It may optionally have a stringified version of the frames 4227db96d56Sopenharmony_ci locals included in it. If *lookup_line* is ``False``, the source code is not 4237db96d56Sopenharmony_ci looked up until the :class:`FrameSummary` has the :attr:`~FrameSummary.line` 4247db96d56Sopenharmony_ci attribute accessed (which also happens when casting it to a tuple). 4257db96d56Sopenharmony_ci :attr:`~FrameSummary.line` may be directly provided, and will prevent line 4267db96d56Sopenharmony_ci lookups happening at all. *locals* is an optional local variable 4277db96d56Sopenharmony_ci dictionary, and if supplied the variable representations are stored in the 4287db96d56Sopenharmony_ci summary for later display. 4297db96d56Sopenharmony_ci 4307db96d56Sopenharmony_ci.. _traceback-example: 4317db96d56Sopenharmony_ci 4327db96d56Sopenharmony_ciTraceback Examples 4337db96d56Sopenharmony_ci------------------ 4347db96d56Sopenharmony_ci 4357db96d56Sopenharmony_ciThis simple example implements a basic read-eval-print loop, similar to (but 4367db96d56Sopenharmony_ciless useful than) the standard Python interactive interpreter loop. For a more 4377db96d56Sopenharmony_cicomplete implementation of the interpreter loop, refer to the :mod:`code` 4387db96d56Sopenharmony_cimodule. :: 4397db96d56Sopenharmony_ci 4407db96d56Sopenharmony_ci import sys, traceback 4417db96d56Sopenharmony_ci 4427db96d56Sopenharmony_ci def run_user_code(envdir): 4437db96d56Sopenharmony_ci source = input(">>> ") 4447db96d56Sopenharmony_ci try: 4457db96d56Sopenharmony_ci exec(source, envdir) 4467db96d56Sopenharmony_ci except Exception: 4477db96d56Sopenharmony_ci print("Exception in user code:") 4487db96d56Sopenharmony_ci print("-"*60) 4497db96d56Sopenharmony_ci traceback.print_exc(file=sys.stdout) 4507db96d56Sopenharmony_ci print("-"*60) 4517db96d56Sopenharmony_ci 4527db96d56Sopenharmony_ci envdir = {} 4537db96d56Sopenharmony_ci while True: 4547db96d56Sopenharmony_ci run_user_code(envdir) 4557db96d56Sopenharmony_ci 4567db96d56Sopenharmony_ci 4577db96d56Sopenharmony_ciThe following example demonstrates the different ways to print and format the 4587db96d56Sopenharmony_ciexception and traceback: 4597db96d56Sopenharmony_ci 4607db96d56Sopenharmony_ci.. testcode:: 4617db96d56Sopenharmony_ci 4627db96d56Sopenharmony_ci import sys, traceback 4637db96d56Sopenharmony_ci 4647db96d56Sopenharmony_ci def lumberjack(): 4657db96d56Sopenharmony_ci bright_side_of_life() 4667db96d56Sopenharmony_ci 4677db96d56Sopenharmony_ci def bright_side_of_life(): 4687db96d56Sopenharmony_ci return tuple()[0] 4697db96d56Sopenharmony_ci 4707db96d56Sopenharmony_ci try: 4717db96d56Sopenharmony_ci lumberjack() 4727db96d56Sopenharmony_ci except IndexError: 4737db96d56Sopenharmony_ci exc = sys.exception() 4747db96d56Sopenharmony_ci print("*** print_tb:") 4757db96d56Sopenharmony_ci traceback.print_tb(exc.__traceback__, limit=1, file=sys.stdout) 4767db96d56Sopenharmony_ci print("*** print_exception:") 4777db96d56Sopenharmony_ci traceback.print_exception(exc, limit=2, file=sys.stdout) 4787db96d56Sopenharmony_ci print("*** print_exc:") 4797db96d56Sopenharmony_ci traceback.print_exc(limit=2, file=sys.stdout) 4807db96d56Sopenharmony_ci print("*** format_exc, first and last line:") 4817db96d56Sopenharmony_ci formatted_lines = traceback.format_exc().splitlines() 4827db96d56Sopenharmony_ci print(formatted_lines[0]) 4837db96d56Sopenharmony_ci print(formatted_lines[-1]) 4847db96d56Sopenharmony_ci print("*** format_exception:") 4857db96d56Sopenharmony_ci print(repr(traceback.format_exception(exc))) 4867db96d56Sopenharmony_ci print("*** extract_tb:") 4877db96d56Sopenharmony_ci print(repr(traceback.extract_tb(exc.__traceback__))) 4887db96d56Sopenharmony_ci print("*** format_tb:") 4897db96d56Sopenharmony_ci print(repr(traceback.format_tb(exc.__traceback__))) 4907db96d56Sopenharmony_ci print("*** tb_lineno:", exc.__traceback__.tb_lineno) 4917db96d56Sopenharmony_ci 4927db96d56Sopenharmony_ciThe output for the example would look similar to this: 4937db96d56Sopenharmony_ci 4947db96d56Sopenharmony_ci.. testoutput:: 4957db96d56Sopenharmony_ci :options: +NORMALIZE_WHITESPACE 4967db96d56Sopenharmony_ci 4977db96d56Sopenharmony_ci *** print_tb: 4987db96d56Sopenharmony_ci File "<doctest...>", line 10, in <module> 4997db96d56Sopenharmony_ci lumberjack() 5007db96d56Sopenharmony_ci *** print_exception: 5017db96d56Sopenharmony_ci Traceback (most recent call last): 5027db96d56Sopenharmony_ci File "<doctest...>", line 10, in <module> 5037db96d56Sopenharmony_ci lumberjack() 5047db96d56Sopenharmony_ci File "<doctest...>", line 4, in lumberjack 5057db96d56Sopenharmony_ci bright_side_of_life() 5067db96d56Sopenharmony_ci IndexError: tuple index out of range 5077db96d56Sopenharmony_ci *** print_exc: 5087db96d56Sopenharmony_ci Traceback (most recent call last): 5097db96d56Sopenharmony_ci File "<doctest...>", line 10, in <module> 5107db96d56Sopenharmony_ci lumberjack() 5117db96d56Sopenharmony_ci File "<doctest...>", line 4, in lumberjack 5127db96d56Sopenharmony_ci bright_side_of_life() 5137db96d56Sopenharmony_ci IndexError: tuple index out of range 5147db96d56Sopenharmony_ci *** format_exc, first and last line: 5157db96d56Sopenharmony_ci Traceback (most recent call last): 5167db96d56Sopenharmony_ci IndexError: tuple index out of range 5177db96d56Sopenharmony_ci *** format_exception: 5187db96d56Sopenharmony_ci ['Traceback (most recent call last):\n', 5197db96d56Sopenharmony_ci ' File "<doctest default[0]>", line 10, in <module>\n lumberjack()\n', 5207db96d56Sopenharmony_ci ' File "<doctest default[0]>", line 4, in lumberjack\n bright_side_of_life()\n', 5217db96d56Sopenharmony_ci ' File "<doctest default[0]>", line 7, in bright_side_of_life\n return tuple()[0]\n ~~~~~~~^^^\n', 5227db96d56Sopenharmony_ci 'IndexError: tuple index out of range\n'] 5237db96d56Sopenharmony_ci *** extract_tb: 5247db96d56Sopenharmony_ci [<FrameSummary file <doctest...>, line 10 in <module>>, 5257db96d56Sopenharmony_ci <FrameSummary file <doctest...>, line 4 in lumberjack>, 5267db96d56Sopenharmony_ci <FrameSummary file <doctest...>, line 7 in bright_side_of_life>] 5277db96d56Sopenharmony_ci *** format_tb: 5287db96d56Sopenharmony_ci [' File "<doctest default[0]>", line 10, in <module>\n lumberjack()\n', 5297db96d56Sopenharmony_ci ' File "<doctest default[0]>", line 4, in lumberjack\n bright_side_of_life()\n', 5307db96d56Sopenharmony_ci ' File "<doctest default[0]>", line 7, in bright_side_of_life\n return tuple()[0]\n ~~~~~~~^^^\n'] 5317db96d56Sopenharmony_ci *** tb_lineno: 10 5327db96d56Sopenharmony_ci 5337db96d56Sopenharmony_ci 5347db96d56Sopenharmony_ciThe following example shows the different ways to print and format the stack:: 5357db96d56Sopenharmony_ci 5367db96d56Sopenharmony_ci >>> import traceback 5377db96d56Sopenharmony_ci >>> def another_function(): 5387db96d56Sopenharmony_ci ... lumberstack() 5397db96d56Sopenharmony_ci ... 5407db96d56Sopenharmony_ci >>> def lumberstack(): 5417db96d56Sopenharmony_ci ... traceback.print_stack() 5427db96d56Sopenharmony_ci ... print(repr(traceback.extract_stack())) 5437db96d56Sopenharmony_ci ... print(repr(traceback.format_stack())) 5447db96d56Sopenharmony_ci ... 5457db96d56Sopenharmony_ci >>> another_function() 5467db96d56Sopenharmony_ci File "<doctest>", line 10, in <module> 5477db96d56Sopenharmony_ci another_function() 5487db96d56Sopenharmony_ci File "<doctest>", line 3, in another_function 5497db96d56Sopenharmony_ci lumberstack() 5507db96d56Sopenharmony_ci File "<doctest>", line 6, in lumberstack 5517db96d56Sopenharmony_ci traceback.print_stack() 5527db96d56Sopenharmony_ci [('<doctest>', 10, '<module>', 'another_function()'), 5537db96d56Sopenharmony_ci ('<doctest>', 3, 'another_function', 'lumberstack()'), 5547db96d56Sopenharmony_ci ('<doctest>', 7, 'lumberstack', 'print(repr(traceback.extract_stack()))')] 5557db96d56Sopenharmony_ci [' File "<doctest>", line 10, in <module>\n another_function()\n', 5567db96d56Sopenharmony_ci ' File "<doctest>", line 3, in another_function\n lumberstack()\n', 5577db96d56Sopenharmony_ci ' File "<doctest>", line 8, in lumberstack\n print(repr(traceback.format_stack()))\n'] 5587db96d56Sopenharmony_ci 5597db96d56Sopenharmony_ci 5607db96d56Sopenharmony_ciThis last example demonstrates the final few formatting functions: 5617db96d56Sopenharmony_ci 5627db96d56Sopenharmony_ci.. doctest:: 5637db96d56Sopenharmony_ci :options: +NORMALIZE_WHITESPACE 5647db96d56Sopenharmony_ci 5657db96d56Sopenharmony_ci >>> import traceback 5667db96d56Sopenharmony_ci >>> traceback.format_list([('spam.py', 3, '<module>', 'spam.eggs()'), 5677db96d56Sopenharmony_ci ... ('eggs.py', 42, 'eggs', 'return "bacon"')]) 5687db96d56Sopenharmony_ci [' File "spam.py", line 3, in <module>\n spam.eggs()\n', 5697db96d56Sopenharmony_ci ' File "eggs.py", line 42, in eggs\n return "bacon"\n'] 5707db96d56Sopenharmony_ci >>> an_error = IndexError('tuple index out of range') 5717db96d56Sopenharmony_ci >>> traceback.format_exception_only(type(an_error), an_error) 5727db96d56Sopenharmony_ci ['IndexError: tuple index out of range\n'] 573