我已经接管了某人的一个相当大的项目的代码。我正在尝试保存程序状态,并且有一个巨大的对象存储了几乎所有其他对象。我正在尝试腌制这个对象,但出现以下错误:
pickle.PicklingError:无法pickle:找不到它builtin.module
从我在谷歌上找到的信息来看,这是因为我在某个地方导入了 python init 之外的东西,或者类属性引用了一个模块。所以,我有两个问题:
任何人都可以确认这就是出现此错误的原因吗?我是否在代码中寻找正确的东西?
有没有办法找到哪行代码/对象成员导致了pickle中的困难?回溯仅给出 pickle 中发生错误的行,而不是被 pickle 的对象的行。
2)您可以将 pickle.Pickler 子类化并对其进行猴子修补以显示其腌制内容的日志。这应该可以更容易地追踪问题所在。
import pickle
class MyPickler (pickle.Pickler):
def save(self, obj):
print 'pickling object', obj, 'of type', type(obj)
pickle.Pickler.save(self, obj)
这仅适用于 pickle.Pickler 的 Python 实现。在Python 3.x中,pickle模块默认使用C实现,Pickler的纯Python版本称为_Pickler。
# Python 3.x
import pickle
class MyPickler (pickle._Pickler):
def save(self, obj):
print ('pickling object {0} of type {1}'.format(obj, type(obj))
pickle._Pickler.save(self, obj)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)