Commit 8e18fc8c authored by Nick Coghlan's avatar Nick Coghlan

Issue #15209: Clarify exception chaining description

- not allowed when implicitly re-raised the current exception
- last exception raised is always displayed last
- attempt to make it clearer when/if cause and context are shown
parent c990f3b1
...@@ -39,17 +39,23 @@ When raising (or re-raising) an exception in an :keyword:`except` clause ...@@ -39,17 +39,23 @@ When raising (or re-raising) an exception in an :keyword:`except` clause
new exception is not handled the traceback that is eventually displayed will new exception is not handled the traceback that is eventually displayed will
include the originating exception(s) and the final exception. include the originating exception(s) and the final exception.
This implicit exception chain can be made explicit by using :keyword:`from` with When raising a new exception (rather than using to bare ``raise`` to re-raise
:keyword:`raise`. The single argument to :keyword:`from` must be an exception the exception currently being handled), the implicit exception chain can be
or ``None``. It will be set as :attr:`__cause__` on the raised exception. made explicit by using :keyword:`from` with :keyword:`raise`. The single
Setting :attr:`__cause__` implicitly sets the :attr:`__suppress_context__` to argument to :keyword:`from` must be an exception or ``None``. It will be set
``True``. If :attr:`__cause__` is an exception, it will be displayed. If as :attr:`__cause__` on the raised exception. Setting :attr:`__cause__`
:attr:`__cause__` is present or :attr:`__suppress_context__` has a true value, also implicitly sets the :attr:`__suppress_context__` attribute to
:attr:`__context__` will not be displayed. ``True``.
In either case, the default exception handling code will not display any of the The default traceback display code shows these chained exceptions in
remaining links in the :attr:`__context__` chain if :attr:`__cause__` has been addition to the traceback for the exception itself. An explicitly chained
set. exception in :attr:`__cause__` is always shown when present. An implicitly
chained exception in :attr:`__context__` is shown only if :attr:`__cause__`
is not set and :attr:`__suppress_context__` is false.
In either case, the exception itself is always shown after any chained
exceptions so that the final line of the traceback always shows the last
exception that was raised.
Base classes Base classes
......
...@@ -322,6 +322,9 @@ Tools/Demos ...@@ -322,6 +322,9 @@ Tools/Demos
Documentation Documentation
------------- -------------
- Issue #15209: Clarify exception chaining description in exceptions module
documentation
- Issue #15990: Improve argument/parameter documentation. - Issue #15990: Improve argument/parameter documentation.
- Issue #16209: Move the documentation for the str built-in function to a new - Issue #16209: Move the documentation for the str built-in function to a new
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment