关于Python递归深度限制

本文简单讨论了Python的递归深度限制及如何设置Python的递归深度。

RuntimeError异常

这段时间用Python写了一个遍历脚本,但是当遍历到900多时就会出现莫名其妙的错误,通过Eclipse调试报错:

RuntimeError: maximum recursion depth exceeded while calling a Python object 

大意是调用 Python 对象时超出最大深度限制

Python的递归深度

Python语言默认的递归深度是很有限的,当递归深度超过值的时候,就会引发RuntimeError异常。

Python专门设置的一种机制用来防止无限递归造成Python溢出,这个值理论上1000,实际运行时在900多次时就会报错。

解决方法

最大递归次数是可以重新调整的。解决的方式是手工设置递归调用深度:

1
2
import sys   
sys.setrecursionlimit(1000000)

执行这个代码后,递归深度调整到1000000层,基本上够用了。

10 条关于 “关于Python递归深度限制”的评论

  1. 还需要使用resource模块调整缓存大小:
    import resource, sys
    resource.setrlimit(resource.RLIMIT_STACK(resource.RLIM_INFINITY,resource.RLIM_INFINITY))
    sys.setrecursionlimit(2**20)
    或者在bash中调整:(可能需要sudo)
    ulimit -s 100000

    stackoveflow上有说,因为python的stackframe太大…所以开不了太大的深度,至少在我的机器上只能开到20000

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

*