Try and Except on RuntimeError in Python 未捕获错误

Try and Except on RuntimeError in Python not catching the Error

我有一个递归函数,当我使用超出限制的数字时会出现此错误 "RuntimeError: maximum recursion depth exceeded in cmp"。我希望使 except 块 return -1(这是要求)并且控制未转移到 except 块。请让我知道我的程序有什么问题。提前致谢

def g(n):
        try:
        def f(x):
            if x == 1:
                return 1
            elif x == 0.5:
                return math.sqrt(PI)
            else:
                final_value = (x-1)*f(x-1)
                return final_value
    except RuntimeError:
        return -1            

    n = f(n/2.0)
    return n

您的 try 中唯一的东西(忽略 IndentationError,希望它不存在于您的真实代码中)是一个 def 语句。定义函数不会引发 RuntimeError,因此没有什么可捕获的。

调用函数会引发一个RuntimeError,所以你需要调用周围的try功能。明显的两个地方就是递归调用:

try:
    final_value = (x-1)*f(x-1)
except RuntimeError:
    return -1
return final_value

... 或围绕外层调用:

try:
    n = f(n/2.0)
except RuntimeError:
    return -1
return n

不知道你要哪个。在外部调用中处理它意味着所有 1000 个递归框架都将被丢弃,而您仅从顶层开始 return -1。在内部调用中处理它意味着你从最里面的帧 return -1 ,但是从那里到顶部的每个帧在传递它之前将 -1 乘以它的局部 x-1备份。希望知道你想要哪一个。