bpo-37826: Document exception chaining in Python tutorial for errors. (GH-15243)

https://bugs.python.org/issue37826
This commit is contained in:
Abhilash Raj 2019-08-14 14:11:32 -07:00 committed by Miss Islington (bot)
parent 71662dc2f1
commit dcfe111eb5

View file

@ -267,6 +267,53 @@ re-raise the exception::
NameError: HiThere
.. _tut-exception-chaining:
Exception Chaining
==================
The :keyword:`raise` statement allows an optional :keyword:`from` which enables
chaining exceptions by setting the ``__cause__`` attribute of the raised
exception. For example::
raise RuntimeError from OSError
This can be useful when you are transforming exceptions. For example::
>>> def func():
... raise IOError
...
>>> try:
... func()
... except IOError as exc:
... raise RuntimeError('Failed to open database') from exc
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in func
OSError
<BLANKLINE>
The above exception was the direct cause of the following exception:
<BLANKLINE>
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
RuntimeError
The expression following the :keyword:`from` must be either an exception or
``None``. Exception chaining happens automatically when an exception is raised
inside an exception handler or :keyword:`finally` section. Exception chaining
can be disabled by using ``from None`` idiom:
>>> try:
... open('database.sqlite')
... except IOError:
... raise RuntimeError from None
...
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
RuntimeError
.. _tut-userexceptions:
User-defined Exceptions