我正在尝试提取我的元胞自动机类的实例,但遇到以下错误:
RuntimeError: maximum recursion depth exceeded while calling a Python object
我的元胞自动机是由一系列单元(和一堆其他东西)组成的,每个单元都有指向其相邻单元的指针。在这个特定的CA中,有256个单元。现在,我知道pickler应该能够识别已经腌制过的物体。在
From docs:
*The pickle module keeps track of the objects it has already serialized, so that later references to the same object won’t be serialized again.
所以我真的不知道,为什么我超过最大递归深度。在
我认为pickler可能会进行深度优先的酸洗,这样它首先跟随指针,超过递归堆栈,然后引发异常。我知道我可以用sys.setrecursionlimit()
扩展最大递归深度,但我不认为这是一个好的、不可伸缩的解决方案。在
第一个问题:酸洗器深度是否首先酸洗?
第二个问题:您知道如何防止这种异常吗?在
所以,正如@ExP所说,pickler执行深度优先酸洗,这会导致递归超出异常。总之,我在这里找到了这个问题的解决方案bugs.python.org。这意味着,对于python3.1,pickler甚至可以处理递归数据,例如图形。在
还有一个不那么优雅的解决方案,它需要更多的时间来提取一些递归数据,但它很简单(只需要几行代码)。链接here。在
看来,是时候慢慢地向Python移动了。希望有人能找到有用的答案。在
相关问题 更多 >
编程相关推荐