Ответ 1
Чтобы сделать это, я бы использовал dill, который может сериализовать почти что угодно в python. У Dill также есть несколько хороших инструментов, которые помогут вам понять, что заставляет ваш травление терпеть неудачу, когда ваш код не работает.
>>> import dill
>>> dill.loads(dill.dumps(your_bad_object))
>>> ...
>>> # if you get a pickling error, use dill tools to figure out a workaround
>>> dill.detect.badobjects(your_bad_object, depth=0)
>>> dill.detect.badobjects(your_bad_object, depth=1)
>>> ...
Если вы абсолютно этого хотели, вы могли бы использовать dill badobjects
(или одну из других функций обнаружения) для рекурсивного погружения в цепочку ссылок объектов и выталкивать нераспадаемые объекты вместо того, чтобы называть их на каждой глубине, как указано выше.
Кроме того, objgraph является довольно удобным дополнением к набору тестов.
>>> # visualize the references in your bad objects
>>> objgraph.show_refs(your_bad_object, filename='your_bad_object.png')
Или, как я уже упоминал в вышеприведенном сообщении, вы можете использовать укроп, чтобы распиливать весь сеанс python одной командой. Это немного переполняет ваш вопрос здесь, но это тоже сработает.