Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中的RuntimeError未捕获错误时尝试并执行除外_Python_Error Handling_Runtime Error_Try Catch_Try Except - Fatal编程技术网

在Python中的RuntimeError未捕获错误时尝试并执行除外

在Python中的RuntimeError未捕获错误时尝试并执行除外,python,error-handling,runtime-error,try-catch,try-except,Python,Error Handling,Runtime Error,Try Catch,Try Except,我有一个递归函数,它给出了这个错误RuntimeError:当我使用超过限制的数字时,cmp中超过了最大递归深度。我希望使except块返回-1,这是必需的,并且控件没有被转移到except块。请务必让我知道我的程序出了什么问题。提前谢谢 def g(n): try: def f(x): if x == 1: return 1 elif x == 0.5:

我有一个递归函数,它给出了这个错误RuntimeError:当我使用超过限制的数字时,cmp中超过了最大递归深度。我希望使except块返回-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

您尝试忽略indicationError的唯一内容是def语句,而实际代码中可能没有这个错误。定义函数不会引发运行时错误,因此没有什么可捕获的

调用该函数会引发运行时错误,因此需要尝试调用该函数。两个明显的地方是递归调用:

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个递归帧都被丢弃,您只需从顶层返回-1。在内部调用中处理它意味着您从最里面的帧返回-1,但是从那里到顶部的每个帧在将其传递回之前都将-1乘以其本地x-1。希望你知道你想要的是哪一个。

我不确定这应该做什么。对于偶数整数,它只是n/2!。对于奇数整数,它是阶乘函数的一种部分扩展,当你期望gamman/2+1时,它是接近gamman/2的实数。对于其他的一切,除非一个舍入误差恰好使你在下降的过程中达到1或0.5,否则它是一个无限递归到负无穷大。