我遇到的情况是,如果满足特定条件,则函数将在错误处理期间调用自身。像这样:
def test(param):
# code
try:
# attempt
except ValueError as e:
if (x):
test(param+1)
我注意到,如果卡在excepts
的循环中并尝试用键盘取消,则会出现巨大的堆栈跟踪。这似乎不正确。
有没有更好的方法来解决这个问题?
编辑:
运行了一段时间后,我得到了:
RecursionError: maximum recursion depth exceeded while calling a Python object
我不确定是否相关,但是我想如果递归函数调用过多会引起递归深度问题?
答案 0 :(得分:1)
这是在失败时重复操作而不使用递归的一种方法。
def dostuff(param):
while True:
# code
try:
# attempt
except ValueError:
if x:
param += 1
continue
break
这样,如果attempt
成功,则循环将中断。但是,如果它引发一个ValueError
,并且如果您的x
条件(无论是什么)都成立,那么循环主体将以param
递增1重复。