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