加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 23:23:35 所属栏目:Python 来源:网络整理
导读:我试图通过以下代码实验性地确定 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 dep
我试图通过以下代码实验性地确定 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询问限制是什么.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读