4

我正在运行递归循环以实现对某事的最大优化,并且正在达到代码达到RuntimeError: maximum recursion depth exceeded while calling a Python object 的点。这是意料之中的,但我想在代码遇到该错误之前立即停止代码,这样我就可以在那时查看我的数据。

是否有可能有一个while循环说类似的话?像“嘿,运行这个循环,直到达到最大递归深度。一旦达到,停止并返回。”

谢谢您的帮助!

4

3 回答 3

6

您可以执行以下操作

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

注意:找出最大递归深度错误的错误号并检查它而不是错误字符串可能是值得的。

于 2012-08-24T18:19:47.553 回答
2

也许,在 try/except RuntimeError 块中有递归调用?当调用except时返回值。

编辑:是的,这是可能的,就像这样:

def recursion(i):
    try:
        return recursion(i+1)
    except RuntimeError:
        return i

a=0
print recursion(a)
于 2012-08-24T18:14:53.343 回答
1

在更全局的范围内存储sys.maxrecursionlimit()为变量(比如)。maxrec每次递归,从 中1扣除maxrec。在递归之前检查,但要确保它maxrec不是0. 如果maxrechits 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)

希望这可以帮助

于 2012-08-24T18:34:38.973 回答