我刚才注意到以下用Python 2.x编写的代码没有转到except
- 块
class MyException:
pass
try:
raise MyException()
except Exception:
print('Exception')
输出
Traceback (most recent call last): File "main.py", line 5, in
<module>
raise MyException()
__main__.MyException: <__main__.MyException instance at 0x021E9DC8>
,而以下代码执行:
try:
raise 'str'
except Exception:
print('Exception')
输出
Exception
例如,raise 0
表达式也是如此。
为什么呢?这背后的原因是什么?
答案 0 :(得分:2)
至少对于python 2.7:
raise 'str'
和raise 0
都会提升TypeError
。这将由代码中的except Exception
分支处理。
由于您自己的类MyException
未从Exception
继承,因此永远不会执行except
分支。你仍然可以这样做:
try:
raise MyException()
except MyException:
print('Exception')
在您的示例中,输出__main__.MyException: <__main__.MyException instance at 0x021E9DC8>
由sys.excepthook
(顶级异常处理程序)打印,因为您从未捕获过异常。