假设我有两个(或更多)函数。一个是更高级别的,通过调用不同的其他函数来处理东西。如果其中一个函数失败(例如数学错误),我不仅要“中止”该函数,还要“中止”调用它的函数。在我的例子中,我需要这个来避免错误并避免完成所有计算的其余部分,而不退出整个过程(这也会终止我的 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))
当 10 除以 x
时,用值 0 初始化 x
会导致 levelB
崩溃。所以我首先确保 x
不同于 0。如果不是,则通过调用 return 中止该函数。现在 levelA
想要继续将 levelB
的结果加倍,在 x=0
的情况下,它是“None”,我们在那里去另一个崩溃。
当然,我能做的就是插入一行
if xx is None: return
在执行 xx *= 2
之前。但在我的真实情况下,不只是一个额外的级别,而是 2 甚至 3 个,并且调用了许多不同的函数。我想避免检查函数的每个输出是否有错误。
所以我的问题是:我能否以某种方式一直回到第一个函数调用并跳过中间的函数调用?类似“深度回归”的东西?
最佳答案
异常是为了处理您描述的情况而发明的。所以,例如:
In [72]: def f1(x):
...: return f2(x)
...:
In [73]: def f2(x):
...: return f3(x)
...:
In [74]: def f3(x):
...: if x > 0:
...: return x
...: else:
...: raise ValueError("f3 called with negative argument")
...:
In [75]: try:
...: print(f1(-2))
...: except ValueError as e:
...: print(e)
...:
f3 called with negative argument
关于python - "Deep return"一路回到第一次函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45920002/