异常如何知道它是否被处理?

时间:2018-01-08 15:58:03

标签: python python-3.x exception

引发时,SystemExit会导致解释器退出,除非处理异常。

try:
    raise SystemExit()
except SystemExit:
    print('not today')
# Continue flow...

我想模仿这种行为并编写我自己的异常,只有在未捕获到异常时才会执行某些代码。

显然这不起作用:

class MyFatalError(Exception):

    def __init__(self):
        import sys
        sys.exit()

try:
    raise MyFatalError()
except MyFatalError:
    print('never gets here')

(...因为__init__在实例化时执行,无论是否处理错误。)

是否有一种(简单和pythonic)方式使异常在处理时表现不同?

1 个答案:

答案 0 :(得分:2)

您不应该将SystemExit视为正常例外。所有更高级别的语言都有一个立即关闭进程的功能,在python中会sys._exit(),但sys.exit()也有同样的功能,但允许你的finally块首先运行,并作为例外实现。

您应该通过在应用程序的最低级别设置try - except块来完成所需的操作。行为应该在处理程序代码中,而不是在异常中。