[英]Try and Except on RuntimeError in Python not catching the Error
我有一个递归函数,当我使用超出限制的数字时,会出现此错误“ 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
相乘,然后再传递回去。 希望您知道您想要哪一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.