假设我有两个(或更多)函数。一个是更高层次的,通过调用不同的其他功能处理东西。如果其中一个函数失败(例如数学错误),我想“中止”不仅是该函数,还有那些调用它的函数。在我的情况下,我需要这个来避免错误,并避免完成所有计算的其余部分,而不必退出整个过程(这也会终止我的GUI)。相反,我希望脚本能够继续运行,但回到最上层。“深度返回”返回第一个函数调用
这是我原来的问题的抽象:
def levelA(x):
xx = levelB(x=x)
xx *= 2
return xx
def levelB(x):
if x==0: return
y = 10/x
return y
x = 0
print (levelA(x=x))
初始化x
值为0将导致levelB
崩溃时10由x
分。所以我首先确定x
与0不同。如果不是,则函数通过调用return返回。现在levelA
想要继续将levelB
的结果翻倍,在x=0
的情况下,结果为“无”,并且我们还有另一次崩溃。
当然,有什么我能做的就是做xx *= 2
之前插入线
if xx is None: return
。但在我的实际情况中,不仅有一个额外的级别,而且还有2个甚至3个,并且有很多不同的函数被调用。我想避免检查函数的每个输出是否有错误。
所以我的问题是:我可以以某种方式回到第一个函数调用,并跳过那些之间的?像“深度回报”?
'try'和'除了''而不是'if'和'else'。这就是所谓的[EAFP](https://docs.python.org/3/glossary.html#term-eafp)。 :) – MSeifert
抛出一个自定义异常,并在第一个函数中捕获它? –
'if x == 0:return' this returns'None' and renders your first function invalid – Mangohero1