Python 异常如何知道它是否';正在处理什么?
当引发时,Python 异常如何知道它是否';正在处理什么?,python,python-3.x,exception,Python,Python 3.x,Exception,当引发时,SystemExit会导致解释器退出,除非处理了异常 try: raise SystemExit() except SystemExit: print('not today') # Continue flow... 我想模仿这种行为,编写自己的异常,只有在未捕获异常时才执行一些代码 显然,这是行不通的: class MyFatalError(Exception): def __init__(self): import sys
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')
(…因为无论是否处理错误,\uuuu init\uuuu
都会在实例化时执行。)
在处理异常时,是否有一种(简单且类似python的)方法可以使异常的行为有所不同?您不应该将
SystemExit
视为正常异常。所有高级语言都有一个立即关闭进程的函数,这就是python中的sys.\u exit()
,但是还有一个sys.exit()
函数也有类似的功能,但是允许您的finally
块首先运行,并作为异常实现
应该通过在应用程序的最低级别上使用
try-except
块来完成您想要的操作。行为应该在处理程序代码中,而不是在异常中。尝试……除非……否则应该这样做。@Dschoni我想问的是,异常如何知道它是否正在被处理,并且可以基于此更改行为。我不是问如何处理异常。我的SystemExit
示例演示了它至少是由标准库中的一些异常实现的。