我正在尝试Pickle相当复杂的对象层次结构并获取异常:
pickle.PicklingError: Can't pickle <class 'function'>: attribute lookup builtins.function failed
有没有一种合理的方法可以用来测试对象层次结构的可选择性?我的目标是找到有问题的功能的位置
为此,我将使用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) >>> ...
如果绝对需要,则可以使用莳萝badobjects(或其他检测功能之一)递归地深入对象的参考链,并弹出无法钻探的对象,而不是像上面那样在每个深度调用它。
badobjects
同样,objgraph对测试套件也很方便。
>>> # visualize the references in your bad objects >>> objgraph.show_refs(your_bad_object, filename='your_bad_object.png')