函数在错误处理中调用自身是否为pythonic?

时间:2018-12-01 16:50:30

标签: python python-3.x error-handling

我遇到的情况是,如果满足特定条件,则函数将在错误处理期间调用自身。像这样:

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

我不确定是否相关,但是我想如果递归函数调用过多会引起递归深度问题?

1 个答案:

答案 0 :(得分:1)

这是在失败时重复操作而不使用递归的一种方法。

def dostuff(param):
    while True:
        # code
        try:
            # attempt
        except ValueError:
            if x:
                param += 1
                continue
        break 

这样,如果attempt成功,则循环将中断。但是,如果它引发一个ValueError,并且如果您的x条件(无论是什么)都成立,那么循环主体将以param递增1重复。