Pickle error assert id (obj) не в self.memo

Я использую 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

Если вы не публикуете сокращенную версию своего кода, трудно помочь. Однако dill имеет некоторые встроенные методы обнаружения. Посмотрите dill.detect.

>>> # trace dill 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 - по крайней мере, первые 15 разделов стандартной библиотеки python, а также некоторые другие.