gpt4 book ai didi

python - 尝试并在Python中对RuntimeError进行尝试,但未捕获到错误

转载 作者:行者123 更新时间:2023-12-03 08:22:47 25 4
gpt4 key购买 nike

我有一个递归函数,当我使用超出限制的数字时,会出现此错误“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

最佳答案

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

关于python - 尝试并在Python中对RuntimeError进行尝试,但未捕获到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52250592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com