0
在Python中,如果函数A调用函数B,并且函数B调用函数C,并且函数C抛出一个ValueError(作为示例),那么错误是否会在调用堆栈上向上,从而函数A也会抛出ValueError?例如,我可以从函数A中的函数C捕获值错误吗?Python异常会进入调用堆栈吗?
另外,如果您创建自己的仅在函数C中定义的异常,它是否也会上调用堆栈,以便函数A抛出相同的错误?
在Python中,如果函数A调用函数B,并且函数B调用函数C,并且函数C抛出一个ValueError(作为示例),那么错误是否会在调用堆栈上向上,从而函数A也会抛出ValueError?例如,我可以从函数A中的函数C捕获值错误吗?Python异常会进入调用堆栈吗?
另外,如果您创建自己的仅在函数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()
结果:
Caught a value error in `a`.
是的,看起来像错误使得它的方式调用堆栈。
如果您创建了自己的仅在函数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`.
是的,自定义异常使他们的方式调用堆栈过。但是你不能在a
中做except MyCustomException:
,因为这个名字只存在于c
。出于这个原因,在可行的情况下,在全球范围内宣布课程。
你试过了吗? –
你在这里问的是一件简单的事情,你可以检查自己。 – itzMEonTV
我想知道异常的概念如何在不传递堆栈的情况下工作。 –