在测试python max recursion depth时,为什么我多次遇到RuntimeError?

前端之家收集整理的这篇文章主要介绍了在测试python max recursion depth时,为什么我多次遇到RuntimeError?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图通过以下代码实验性地确定 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

为什么我的程序第一次遇到RuntimeError时没有立即退出,但继续运行5次调用recursive()?

解决方法

您正在使用 exit() function the Python site module sets在交互式解释器中使用.

这是您调用的Python代码,而不是C代码.这会多次触发递归深度异常处理程序,直到您远离堆栈限制.

当你正好抵抗极限时,尝试调用exit()失败,因为你达到了堆栈限制.因此引发了一个RuntimeError,回退到998的调用.在这里你试着再次调用exit(),它试图再做一些工作再次引发RuntimeError,再回到另一个等级,直到有足够的堆栈空间留给最后在python函数调用raiseExit().

请改用sys.exit()以避免给堆叠增加更多应变.

或者,为了将来参考,请使用sys.getrecursionlimit() function直接向Python询问限制是什么.

原文链接:https://www.f2er.com/python/186055.html

猜你在找的Python相关文章