调试泡菜

She*_*ena 5 python pickle python-3.2

我试图挑选一个相关的对象层次结构并获得异常:

pickle.PicklingError: Can't pickle <class 'function'>: attribute lookup builtins.function failed
Run Code Online (Sandbox Code Playgroud)

有没有合理的方法可以用来测试对象层次结构的可读性?我的目标是找到违规功能的位置

Mik*_*rns 9

要做到这一点,我会使用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)
>>> ...
Run Code Online (Sandbox Code Playgroud)

如果您绝对想要,可以使用dill badobjects(或其他检测功能之一)递归地潜入对象的参考链,并弹出不可移动的对象,而不是如上所述在每个深度调用它.

此外,objgraph对测试套件也非常方便.

>>> # visualize the references in your bad objects
>>> objgraph.show_refs(your_bad_object, filename='your_bad_object.png')
Run Code Online (Sandbox Code Playgroud)

  • 莳萝可能比“pickle”太强,以至于它可以腌制“pickle”不能腌制的东西,而且我找不到“pickle”不能腌制的东西...... (2认同)