我试图通过以下代码实验性地确定
Python的最大递归深度:
def recursive(i): i = i + 1 try: recursive(i) except RuntimeError: print 'max depth == %d' % i exit(0) recursive(0)
但当我运行它时,发生了这种情况:
[ hive ~ ]$python recursive.py max depth == 999 max depth == 998 max depth == 997 max depth == 996 max depth == 995 max depth == 994
解决方法
您正在使用
exit()
function the Python site
module sets在交互式解释器中使用.
这是您调用的Python代码,而不是C代码.这会多次触发递归深度异常处理程序,直到您远离堆栈限制.
当你正好抵抗极限时,尝试调用exit()失败,因为你达到了堆栈限制.因此引发了一个RuntimeError,回退到998的调用.在这里你试着再次调用exit(),它试图再做一些工作再次引发RuntimeError,再回到另一个等级,直到有足够的堆栈空间留给最后在python函数中调用raiseExit().
请改用sys.exit()
以避免给堆叠增加更多应变.
或者,为了将来参考,请使用sys.getrecursionlimit()
function直接向Python询问限制是什么.