Python 异常是否进入调用堆栈?
Do Python Exceptions go up the Call stack?
在 Python 中,如果函数 A 调用函数 B,函数 B 调用函数 C,并且函数 C 抛出一个 ValueError(作为示例),错误是否会在调用堆栈中上升,以便函数 A 也抛出 ValueError?因此,例如,我可以在函数 A 中捕获函数 C 的值错误吗?
此外,如果您创建自己的仅在函数 C 中定义的异常,它是否也会进入调用堆栈以便函数 A 抛出相同的错误?
does the error make its way up the call stack so that Function A also throws 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`.
是的,看起来错误正在调用堆栈中。
what if you create your own Exception that is defined in Function C only, will it also go up the Call stack so that Function A throws the same error?
我们试试看吧
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`.
是的,自定义异常也在调用堆栈中出现。但是您将无法在 a
中执行 except MyCustomException:
,因为该名称仅存在于 c
中。因此,在可行的情况下,在全局范围内声明 类。
在 Python 中,如果函数 A 调用函数 B,函数 B 调用函数 C,并且函数 C 抛出一个 ValueError(作为示例),错误是否会在调用堆栈中上升,以便函数 A 也抛出 ValueError?因此,例如,我可以在函数 A 中捕获函数 C 的值错误吗?
此外,如果您创建自己的仅在函数 C 中定义的异常,它是否也会进入调用堆栈以便函数 A 抛出相同的错误?
does the error make its way up the call stack so that Function A also throws 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`.
是的,看起来错误正在调用堆栈中。
what if you create your own Exception that is defined in Function C only, will it also go up the Call stack so that Function A throws the same error?
我们试试看吧
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`.
是的,自定义异常也在调用堆栈中出现。但是您将无法在 a
中执行 except MyCustomException:
,因为该名称仅存在于 c
中。因此,在可行的情况下,在全局范围内声明 类。