sam*_*ore 2 python error-handling callstack
在 Python 中,如果函数 A 调用函数 B,函数 B 调用函数 C,而函数 C 抛出一个 ValueError(作为示例),错误是否会沿着调用堆栈向上移动,从而函数 A 也抛出一个 ValueError?例如,我可以从函数 A 中的函数 C 中捕获值错误吗?
另外,如果您创建自己的仅在函数 C 中定义的异常,它是否也会上升到调用堆栈,以便函数 A 抛出相同的错误?
错误是否会进入调用堆栈,以便函数 A 也抛出 ValueError?
让我们试试看。
def a():
try:
b()
except ValueError:
print("Caught a value error in `a`.")
def b():
c()
def c():
raise ValueError
a()
Run Code Online (Sandbox Code Playgroud)
结果:
Caught a value error in `a`.
Run Code Online (Sandbox Code Playgroud)
是的,看起来错误会在调用堆栈中上升。
如果您创建自己的仅在函数 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()
Run Code Online (Sandbox Code Playgroud)
结果:
Caught some kind of exception in `a`.
Run Code Online (Sandbox Code Playgroud)
是的,自定义异常也会进入调用堆栈。但是你不能except MyCustomException:在 in中做a,因为那个名字只存在于c. 因此,在可行的情况下,在全局范围内声明类。