在Python中,如果函数A调用函数B,函数B调用函数C,函数C抛出一个ValueError(作为示例),错误是否会在调用堆栈中向上移动,以便函数A也抛出一个ValueError ?例如,我可以从函数A中的函数C中捕获值错误吗?
此外,如果您创建自己的Exception仅在函数C中定义,它是否也会调用堆栈,以便函数A抛出相同的错误?
答案 0 :(得分:3)
错误是否会在调用堆栈中向上移动,以便函数A也抛出ValueError?
让我们试试吧。
def a():
try:
b()
except ValueError:
print("Caught a value error in `a`.")
def b():
c()
def c():
raise ValueError
a()
结果:
Caught a value error in `a`.
是的,看起来错误会在调用堆栈中上升。
如果你创建自己的Exception只在Function C中定义,它会在调用堆栈上运行,以便函数A抛出相同的错误吗?
让我们试试吧。
def a():
try:
b()
except:
print("Caught some kind of exception in `a`.")
def b():
c()
def c():
class MyCustomException(Exception):
pass
raise MyCustomException
a()
结果:
Caught some kind of exception in `a`.
是的,自定义异常也会进入调用堆栈。但是您无法在except MyCustomException:
中执行a
,因为该名称仅存在于c
中。因此,在可行的情况下,在全局范围内声明类。