引发时,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)方式使异常在处理时表现不同?
答案 0 :(得分:2)
您不应该将SystemExit
视为正常例外。所有更高级别的语言都有一个立即关闭进程的功能,在python中会sys._exit()
,但sys.exit()
也有同样的功能,但允许你的finally
块首先运行,并作为例外实现。
您应该通过在应用程序的最低级别设置try - except
块来完成所需的操作。行为应该在处理程序代码中,而不是在异常中。