为此,我会使用dill,它可以在 python 中序列化几乎任何东西。Dill 还提供了一些很好的工具,可以帮助您了解在代码失败时导致酸洗失败的原因。
>>> import dill
>>> dill.loads(dill.dumps(your_bad_object))
>>> ...
>>> # if you get a pickling error, use dill's 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')
或者,正如我在您上面提到的帖子中提到的,您可以使用 dill 在一个命令中腌制整个 python 会话。对于您的问题来说,这有点矫枉过正,但它也可以。