2012-08-24 43 views
4

我正在運行一個遞歸循環來實現對某些事物的最大優化,並且達到了代碼擊中RuntimeError: maximum recursion depth exceeded while calling a Python objec t的點。這是預料之中的,但我想在它遇到錯誤之前停止代碼,所以我可以在那時查看我的數據。Python可能運行while循環直到RuntimeError:調用Python對象時超出最大遞歸深度

有沒有可能有一個while循環說類似的東西?就像「嘿,運行這個循環,直到達到最大遞歸深度。一旦到達,停止並返回。」

感謝您的幫助!

+0

你可以在錯誤使用PDB抓住它,並檢查環境 – TJD

回答

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

注意:它可能是值得的找出錯誤最大遞歸深度錯誤的編號,並檢查它而不是錯誤字符串。

+0

這個工作,但它的'e.message'不'e.strerror' – schwiz

2

也許,在try/except RuntimeError塊中有遞歸調用?當被調用時返回值。

編輯:是的,這是可能的,就像這樣:

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

a=0 
print recursion(a) 
1

sys.maxrecursionlimit()作爲變量(如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) 

希望這有助於

相關問題