[3.12] gh-101100: Improve documentation of TracebackType attributes (GH-112884) (#112911)

gh-101100: Improve documentation of `TracebackType` attributes (GH-112884)
(cherry picked from commit 96f64a2b1b)

Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
Miss Islington (bot) 2023-12-09 23:50:33 +01:00 committed by GitHub
parent ebcf7577a7
commit b23034de9d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 53 additions and 34 deletions

View file

@ -5458,8 +5458,9 @@ It is written as ``NotImplemented``.
Internal Objects Internal Objects
---------------- ----------------
See :ref:`types` for this information. It describes stack frame objects, See :ref:`types` for this information. It describes
traceback objects, and slice objects. :ref:`stack frame objects <frame-objects>`,
:ref:`traceback objects <traceback-objects>`, and slice objects.
.. _specialattrs: .. _specialattrs:

View file

@ -16,7 +16,8 @@ interpreter.
.. index:: pair: object; traceback .. index:: pair: object; traceback
The module uses traceback objects --- these are objects of type :class:`types.TracebackType`, The module uses :ref:`traceback objects <traceback-objects>` --- these are
objects of type :class:`types.TracebackType`,
which are assigned to the ``__traceback__`` field of :class:`BaseException` instances. which are assigned to the ``__traceback__`` field of :class:`BaseException` instances.
.. seealso:: .. seealso::
@ -205,7 +206,8 @@ The module defines the following functions:
.. function:: walk_tb(tb) .. function:: walk_tb(tb)
Walk a traceback following ``tb_next`` yielding the frame and line number Walk a traceback following :attr:`~traceback.tb_next` yielding the frame and
line number
for each frame. This helper is used with :meth:`StackSummary.extract`. for each frame. This helper is used with :meth:`StackSummary.extract`.
.. versionadded:: 3.5 .. versionadded:: 3.5

View file

@ -376,11 +376,8 @@ Standard names are defined for the following types:
.. data:: FrameType .. data:: FrameType
The type of frame objects such as found in ``tb.tb_frame`` if ``tb`` is a The type of :ref:`frame objects <frame-objects>` such as found in
traceback object. :attr:`tb.tb_frame <traceback.tb_frame>` if ``tb`` is a traceback object.
See :ref:`the language reference <frame-objects>` for details of the
available attributes and operations.
.. data:: GetSetDescriptorType .. data:: GetSetDescriptorType

View file

@ -1244,8 +1244,9 @@ Frame objects
.. index:: pair: object; frame .. index:: pair: object; frame
Frame objects represent execution frames. They may occur in traceback objects Frame objects represent execution frames. They may occur in
(see below), and are also passed to registered trace functions. :ref:`traceback objects <traceback-objects>`,
and are also passed to registered trace functions.
.. index:: .. index::
single: f_back (frame attribute) single: f_back (frame attribute)
@ -1352,26 +1353,30 @@ Traceback objects
single: sys.exception single: sys.exception
single: sys.last_traceback single: sys.last_traceback
Traceback objects represent a stack trace of an exception. A traceback object Traceback objects represent the stack trace of an :ref:`exception <tut-errors>`.
A traceback object
is implicitly created when an exception occurs, and may also be explicitly is implicitly created when an exception occurs, and may also be explicitly
created by calling :class:`types.TracebackType`. created by calling :class:`types.TracebackType`.
.. versionchanged:: 3.7
Traceback objects can now be explicitly instantiated from Python code.
For implicitly created tracebacks, when the search for an exception handler For implicitly created tracebacks, when the search for an exception handler
unwinds the execution stack, at each unwound level a traceback object is unwinds the execution stack, at each unwound level a traceback object is
inserted in front of the current traceback. When an exception handler is inserted in front of the current traceback. When an exception handler is
entered, the stack trace is made available to the program. (See section entered, the stack trace is made available to the program. (See section
:ref:`try`.) It is accessible as the third item of the :ref:`try`.) It is accessible as the third item of the
tuple returned by ``sys.exc_info()``, and as the ``__traceback__`` attribute tuple returned by :func:`sys.exc_info`, and as the ``__traceback__`` attribute
of the caught exception. of the caught exception.
When the program contains no suitable When the program contains no suitable
handler, the stack trace is written (nicely formatted) to the standard error handler, the stack trace is written (nicely formatted) to the standard error
stream; if the interpreter is interactive, it is also made available to the user stream; if the interpreter is interactive, it is also made available to the user
as ``sys.last_traceback``. as :data:`sys.last_traceback`.
For explicitly created tracebacks, it is up to the creator of the traceback For explicitly created tracebacks, it is up to the creator of the traceback
to determine how the ``tb_next`` attributes should be linked to form a to determine how the :attr:`~traceback.tb_next` attributes should be linked to
full stack trace. form a full stack trace.
.. index:: .. index::
single: tb_frame (traceback attribute) single: tb_frame (traceback attribute)
@ -1380,27 +1385,40 @@ full stack trace.
pair: statement; try pair: statement; try
Special read-only attributes: Special read-only attributes:
:attr:`tb_frame` points to the execution frame of the current level;
:attr:`tb_lineno` gives the line number where the exception occurred;
:attr:`tb_lasti` indicates the precise instruction.
The line number and last instruction in the traceback may differ from the
line number of its frame object if the exception occurred in a
:keyword:`try` statement with no matching except clause or with a
finally clause.
Accessing ``tb_frame`` raises an :ref:`auditing event <auditing>` .. list-table::
``object.__getattr__`` with arguments ``obj`` and ``"tb_frame"``.
* - .. attribute:: traceback.tb_frame
- Points to the execution :ref:`frame <frame-objects>` of the current
level.
Accessing this attribute raises an
:ref:`auditing event <auditing>` ``object.__getattr__`` with arguments
``obj`` and ``"tb_frame"``.
* - .. attribute:: traceback.tb_lineno
- Gives the line number where the exception occurred
* - .. attribute:: traceback.tb_lasti
- Indicates the "precise instruction".
The line number and last instruction in the traceback may differ from the
line number of its :ref:`frame object <frame-objects>` if the exception
occurred in a
:keyword:`try` statement with no matching except clause or with a
:keyword:`finally` clause.
.. index:: .. index::
single: tb_next (traceback attribute) single: tb_next (traceback attribute)
Special writable attribute: :attr:`tb_next` is the next level in the stack .. attribute:: traceback.tb_next
trace (towards the frame where the exception occurred), or ``None`` if
there is no next level.
.. versionchanged:: 3.7 The special writable attribute :attr:`!tb_next` is the next level in the
Traceback objects can now be explicitly instantiated from Python code, stack trace (towards the frame where the exception occurred), or ``None`` if
and the ``tb_next`` attribute of existing instances can be updated. there is no next level.
.. versionchanged:: 3.7
This attribute is now writable
Slice objects Slice objects

View file

@ -1947,7 +1947,8 @@ traceback
--------- ---------
New :func:`~traceback.walk_stack` and :func:`~traceback.walk_tb` New :func:`~traceback.walk_stack` and :func:`~traceback.walk_tb`
functions to conveniently traverse frame and traceback objects. functions to conveniently traverse frame and
:ref:`traceback objects <traceback-objects>`.
(Contributed by Robert Collins in :issue:`17911`.) (Contributed by Robert Collins in :issue:`17911`.)
New lightweight classes: :class:`~traceback.TracebackException`, New lightweight classes: :class:`~traceback.TracebackException`,

View file

@ -525,8 +525,8 @@ Other Language Changes
* In order to better support dynamic creation of stack traces, * In order to better support dynamic creation of stack traces,
:class:`types.TracebackType` can now be instantiated from Python code, and :class:`types.TracebackType` can now be instantiated from Python code, and
the ``tb_next`` attribute on :ref:`tracebacks <traceback-objects>` is now the :attr:`~traceback.tb_next` attribute on
writable. :ref:`tracebacks <traceback-objects>` is now writable.
(Contributed by Nathaniel J. Smith in :issue:`30579`.) (Contributed by Nathaniel J. Smith in :issue:`30579`.)
* When using the :option:`-m` switch, ``sys.path[0]`` is now eagerly expanded * When using the :option:`-m` switch, ``sys.path[0]`` is now eagerly expanded