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
备份。希望你知道你想要哪一个。
我有一个递归函数,当我使用超出限制的数字时会出现此错误 "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
备份。希望你知道你想要哪一个。