没有参数的 raise 声明的文档说
如果不存在表达式, raise 会重新引发在当前范围内活动的最后一个异常。
我曾经认为这意味着当前函数必须执行一个except
子句。在阅读了这个问题并进行了一些实验之后,我认为这意味着堆栈上的任何函数都必须执行一个except
子句,但我不确定。另外,我意识到我不知道堆栈跟踪如何与无参数加注一起工作:
def f():
try:
raise Exception
except:
g()
def g():
raise
f()
生产
Traceback (most recent call last):
File "foo", line 10, in <module>
f()
File "foo", line 5, in f
g()
File "foo", line 3, in f
raise Exception
Exception
这看起来不像是最初加注时的筹码,也不像是再次加注时的筹码,或者两个筹码的串联,或者任何我能理解的东西。
我是否正确地寻找执行except
子句的堆栈上的任何函数的无参数加注?此外,堆栈跟踪如何在 reraise 上工作?