我试图通过以下代码实验性地确定Python的最大递归深度:
def recursive(i):
i = i + 1
try:
recursive(i)
except RuntimeError:
print 'max depth == %d' % i
exit(0)
recursive(0)
Run Code Online (Sandbox Code Playgroud)
但当我运行它时,发生了这种情况:
[ hive ~ ]$ python recursive.py
max depth == 999
max depth == 998
max depth == 997
max depth == 996
max depth == 995
max depth == 994
Run Code Online (Sandbox Code Playgroud)
为什么我的程序RuntimeError在第一次遇到时不会立即退出,但是继续再运行5次recursive()?
您正在使用exit()Python site模块设置的功能,以便在交互式解释器中使用.
这是您调用的Python代码,而不是C代码.这会多次触发递归深度异常处理程序,直到您远离堆栈限制.
当你正好迎接限制时,尝试调用exit()失败,因为你达到了堆栈限制.所以a RuntimeError被提出,回到了一个电话998.在这里你试着exit()再次调用,它试图做更多的工作RuntimeError再次提升,回落到另一个等级,直到有足够的堆栈空间留在最后调用raise SystemExit()python函数.
使用sys.exit()来避免增加更多的应变堆栈.
或者,为了将来参考,使用该sys.getrecursionlimit()函数直接向Python询问限制是什么.