Python:超过最大recursion深度

我有以下recursion代码,在每个节点我调用sql查询来获得属于父节点的节点。

这里是错误的:

Exception RuntimeError: 'maximum recursion depth exceeded' in <bound method DictCursor.__del__ of <MySQLdb.cursors.DictCursor object at 0x879768c>> ignored RuntimeError: maximum recursion depth exceeded while calling a Python object Exception AttributeError: "'DictCursor' object has no attribute 'connection'" in <bound method DictCursor.__del__ of <MySQLdb.cursors.DictCursor object at 0x879776c>> ignored 

我调用获取sql结果的方法:

 def returnCategoryQuery(query, variables={}): cursor = db.cursor(cursors.DictCursor); catResults = []; try: cursor.execute(query, variables); for categoryRow in cursor.fetchall(): catResults.append(categoryRow['cl_to']); return catResults; except Exception, e: traceback.print_exc(); 

我其实没有任何问题,但是我把它放在正确的问题上。

recursion码:

 def leaves(first, path=[]): if first: for elem in first: if elem.lower() != 'someString'.lower(): if elem not in path: queryVariable = {'title': elem} for sublist in leaves(returnCategoryQuery(categoryQuery, variables=queryVariable)): path.append(sublist) yield sublist yield elem 

调用recursion函数

 for key, value in idTitleDictionary.iteritems(): for startCategory in value[0]: print startCategory + " ==== Start Category"; categoryResults = []; try: categoryRow = ""; baseCategoryTree[startCategory] = []; #print categoryQuery % {'title': startCategory}; cursor.execute(categoryQuery, {'title': startCategory}); done = False; while not done: categoryRow = cursor.fetchone(); if not categoryRow: done = True; continue; rowValue = categoryRow['cl_to']; categoryResults.append(rowValue); except Exception, e: traceback.print_exc(); try: print "Printing depth " + str(depth); baseCategoryTree[startCategory].append(leaves(categoryResults)) except Exception, e: traceback.print_exc(); 

打印字典的代码,

 print "---Printing-------" for key, value in baseCategoryTree.iteritems(): print key, for elem in value[0]: print elem + ','; raw_input("Press Enter to continue...") print 

如果recursion太深,我应该得到错误,当我调用recursion函数,但是当我打印字典时,我得到这个错误。

你可以增加堆栈的深度 – 这样,更深的recursion调用将是可能的,如下所示:

 import sys sys.setrecursionlimit(10000) # 10000 is an example, try with different values 

…但我build议你先尝试优化你的代码,例如,使用迭代而不是recursion。