假设我有两个(或更多)函数.一个是更高级别,通过调用不同的其他功能处理东西.如果其中一个函数失败(例如数学错误),我不仅要“中止”该函数,还要调用那个函数.在我的情况下,我需要这个来逃避错误,避免完成所有计算的其余部分,而不退出整个过程(这也将终止我的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的情况下,它是“无”,然后我们再次发生崩溃.
当然,我能做的就是插入这条线
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