无法捕获Python的SystemExit异常

22

我正在尝试以以下方式捕获 SystemExit 异常:

try:
    raise SystemExit
except Exception as exception:
    print "success"

但是,它不起作用。

但是,当我像这样更改我的代码时,它确实起作用:

try:
    raise SystemExit
except:
    print "success"

据我所知,except Exception as exception 应该可以捕获任何异常。这也是这里所描述的方式。为什么在这里它不起作用呢?
1个回答

45
文档所述,SystemExit不继承自Exception。你需要使用except BaseException

然而,这是有原因的:

该异常从BaseException继承而来,而不是StandardError或Exception,以免被捕获Exception的代码意外地捕获。

通常情况下,你不会想要以与处理“真正”的异常相同的方式处理SystemExit。你最好明确地使用except SystemExit来处理它。


太好了,谢谢!文档中的异常层次结构非常清晰明了:https://docs.python.org/2/library/exceptions.html#exception-hierarchy - Eugene S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接