我对python异常有疑问.
下面的代码取自python文档,我一度感到困惑.如果有人可以帮助,将不胜感激.
这里的代码给出的输出为:
B C D
class B(Exception):
pass
class C(B):
pass
class D(C):
pass
for cls in [B, C, D]:
try:
raise cls()
except D:
print("D")
except C:
print("C")
except B:
print("B")
如果我更改了部分代码,例如以下代码:
输出将是:
B B B
class B(Exception):
pass
class C(B):
pass
class D(C):
pass
for cls in [B, C, D]:
try:
raise cls()
except B:
print("B")
except C:
print("C")
except D:
print("D")
当我运行此代码而没有try块时,如下所示:
class B(Exception):
pass
class C(B):
pass
class D(C):
pass
for cls in [B, C, D]:
raise cls()
输出为:
Traceback (most recent call last):
File "C:/Users/885710/Documents/PY/ErrorHandling.py", line 12, in
raise cls()
B
以下代码类似:
class B(Exception):
pass
class C(B):
pass
class D(C):
pass
for cls in [C,B, D]:
raise cls()
输出是这个
Traceback (most recent call last):
File "C:/Users/885710/Documents/PY/ErrorHandling.py", line 12, in
raise cls()
C
我感到困惑是因为,如果我单独运行此代码,那么它将给出B或C或D的输出
那么为什么在我的第二个代码段中给出的输出为
B
B
B
即使为所有3个B,C,D类都定义了除外