我正在运行递归循环以实现对某事的最大优化,并且正在达到代码达到RuntimeError: maximum recursion depth exceeded while calling a Python objec
t 的点。这是意料之中的,但我想在代码遇到该错误之前立即停止代码,这样我就可以在那时查看我的数据。
是否有可能有一个while循环说类似的话?像“嘿,运行这个循环,直到达到最大递归深度。一旦达到,停止并返回。”
谢谢您的帮助!
我正在运行递归循环以实现对某事的最大优化,并且正在达到代码达到RuntimeError: maximum recursion depth exceeded while calling a Python objec
t 的点。这是意料之中的,但我想在代码遇到该错误之前立即停止代码,这样我就可以在那时查看我的数据。
是否有可能有一个while循环说类似的话?像“嘿,运行这个循环,直到达到最大递归深度。一旦达到,停止并返回。”
谢谢您的帮助!
您可以执行以下操作
def recurse():
try:
recurse()
except RuntimeError as e:
if e.message == 'maximum recursion depth exceeded while calling a Python object':
# don't recurse any longer
else:
# something else went wrong
http://docs.python.org/tutorial/errors.html
注意:找出最大递归深度错误的错误号并检查它而不是错误字符串可能是值得的。
也许,在 try/except RuntimeError 块中有递归调用?当调用except时返回值。
编辑:是的,这是可能的,就像这样:
def recursion(i):
try:
return recursion(i+1)
except RuntimeError:
return i
a=0
print recursion(a)
在更全局的范围内存储sys.maxrecursionlimit()
为变量(比如)。maxrec
每次递归,从 中1
扣除maxrec
。在递归之前检查,但要确保它maxrec
不是0
. 如果maxrec
hits 0
,你就会知道你已经达到了递归限制,你可以逃脱。
def myFunc(params):
# do stuff
if maxrec <= 0:
return # return whatever you need to
if maxrec > 0:
maxrec -= 1
myFunc(params)
maxrec = sys.getrecursionlimit()
myFunc(params)
希望这可以帮助