pickle错误断言id(obj)不在self.memo中

时间:2014-08-11 10:29:30

标签: python serialization pickle dill

我正在使用dill(泡菜的高级版本)。我想序列化我的对象,但是我收到了这个错误:

/usr/lib/python2.7/pickle.pyc in memoize(self, obj)
    242         if self.fast:
    243             return
--> 244         assert id(obj) not in self.memo
    245         memo_len = len(self.memo)
    246         self.write(self.put(memo_len))

有人可以告诉我发生此错误的可能性或我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果您没有发布代码的简化版本,则很难提供帮助。但是,dill有一些内置检测方法。看看dill.detect

>>> # trace dill's pickling of objects, by printing out step by step trace 
>>> dill.detect.trace(True)

或通过物体检查。

>>> dill.detect.badobjects(yourfailingobject, depth=1)

还有dill.detect.badtypes等等。

或者,您可以使用dill.detect.parentdill.detect.childrendill.detect.reference等跟踪对象之间的相互关系。

以下是使用dill(加objgraph进行可视化)来跟踪循环引用的示例。 https://github.com/uqfoundation/dill/issues/58

还有一个很大的列表,dill不知道如何在dill._objects中序列化 - 至少是python标准库的前15个部分,还有其他部分。