The simplest built-in exception as below:
>>> 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
Throw exception info ,then whole press is done.
Define function f1 and not to define myException:
def f1():
try:
print(1/0)
except:
raise myException('my exception')
Call f1():
>>> f1()
Traceback (most recent call last):
File "<stdin>", line 3, in f1
ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in f1
NameError: name 'myException' is not defined
When the info
Traceback (most recent call last):
File "<stdin>", line 3, in f1
ZeroDivisionError: division by zero
thrown out,exception of print(1/0) is handled as we have seen that in the beginning.
Why the statement in the middle line is During handling of the above exception, another exception occurred: ,instead of After handling of the above exception, another exception occurred:?
What is above exception in the statement During handling of the above exception?It points to try ... except structure in f1 ,instead of exception resulted by 1/0?
If above exception points to exception resulted by 1/0,then After handling of the above exception, another exception occurred is better to describe all the exceptions here!
This is exception chaining as described in The
raiseStatement. You catch theZeroDivisionError. When you raiseMyException, python will automatically add the current exception to its__cause__attribute.That's why you see both exceptions listed. The one you raised, and the one put in the
__cause__attribute. Python lets you customize the exception in several ways, particularly with a "from" exception. Generically, that'sMore specifically, to fully suppress the original exception and keep it out of the
__cause__attribute, raise fromNone: