pickle错误:断言id(obj)不在self.memo中
我现在正在使用 dill(这是一个比pickle更高级的版本)。我想把我的对象进行序列化,但遇到了这个错误:
/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 个回答
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.parent
、dill.detect.children
和 dill.detect.reference
等等。
这里有一个使用 dill
(加上 objgraph
用于可视化)来追踪循环引用的例子。你可以查看这个链接了解更多:https://github.com/uqfoundation/dill/issues/58
此外,dill
也有一个很长的列表,列出了它不知道如何序列化的内容,这些内容在 dill._objects
中可以找到——至少包括 Python 标准库的前 15 个部分,还有一些其他的内容。