无法捕获 SystemExit 异常 Python

Posted

技术标签:

【中文标题】无法捕获 SystemExit 异常 Python【英文标题】:Can't catch SystemExit exception Python 【发布时间】:2014-12-24 17:24:00 【问题描述】:

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

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

但是,它不起作用。

但是当我像这样更改我的代码时它确实有效:

try:
    raise SystemExit
except:
    print "success"

据我所知,except Exception as exception 应该会捕获任何异常。这也是here 的描述方式。为什么这里不适合我?

【问题讨论】:

【参考方案1】:

作为documented,SystemExit 不继承自异常。你必须使用except BaseException

但是,这是有原因的:

异常继承自 BaseException 而不是 StandardError 或 Exception,因此它不会被捕获 Exception 的代码意外捕获。

想要像处理 SystemExit 一样处理“真正的”异常是不寻常的。您最好使用except SystemExit 明确地捕获 SystemExit。

【讨论】:

完美。谢谢!文档异常层次结构中很好地说明了这一点:docs.python.org/2/library/exceptions.html#exception-hierarchy

以上是关于无法捕获 SystemExit 异常 Python的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法防止从sys.exit()引发的SystemExit异常被捕获?

在 Python 中捕获所有异常的坏主意

python中--try except 异常捕获以及正则化替换异常值

全套异常捕获与处理

Python - except不指定异常类别(转)

Visual Studio Code Python 调试“发生异常 SystemExit”