【发布时间】:2015-11-01 19:30:43
【问题描述】:
我刚刚注意到以下用 Python 2.x 编写的代码没有进入 except-block
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 表达式也是如此。
为什么?这背后的原因是什么?
【问题讨论】:
-
我无法回答为什么 Python 2 会以这种方式结束,但它在 Python 3 中已经发生了变化,您不能再引发不继承自
BaseException的对象。即使您确实弄清楚了确切的逻辑,我也不建议在您需要维护的任何代码中使用它。
标签: python python-2.7 exception-handling