In the process of handling an exception, you may want to raise another exception. For example, if you get an IOError
while reading from a file, you may want to raise an application-specific error to present to the users of your library, instead.
You can chain exceptions to show how the handling of exceptions proceeded:
>>> try:
5 / 0
except ZeroDivisionError as e:
raise ValueError("Division failed") from e
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ZeroDivisionError: division by zero
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
ValueError: Division failed