簡體   English   中英

Python可以循環運行直到RuntimeError:調用Python對象時超出了最大遞歸深度

[英]Python possible to run while loop until RuntimeError: maximum recursion depth exceeded while calling a Python object

我正在運行一個遞歸循環來實現某些東西的最大優化,並且達到了代碼遇到RuntimeError: maximum recursion depth exceeded while calling a Python objec 這是預期的,但我想在它遇到該錯誤之前就停止代碼,這樣我就可以在那時查看我的數據。

是否有可能有一個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 )。 每次maxrec ,從maxrec扣除1 在遞歸之前檢查,但要確保maxrec不為0 如果maxrec命中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)

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM