私の問題は、カスタム クラスが pickle.dump で保存されていることです。これらのファイルが保存されたため、カスタム クラスが変更され、pickle.load を使用するとこのエラーが発生します。保存したファイルに問題はありませんか?
エラー:
File "/cprprod/extern/lib/python2.7/pickle.py", line 1378, in load
return Unpickler(file).load()
File "/cprprod/extern/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
file "/cprprod/extern/lib/python2.7/pickle.py", line 1070, in load_inst
self._instantiate(klass, self.marker())
File "/cprprod/extern/lib/python2.7/pickle.py", line 1060, in _instantiate
value = klass(*args)
ファイルをロードするためにできることはありますか?
コード
file = open(filename,'rb')
obj = pickle.load(file)
エラーが表示されます。
エラーを再現できる最小限のコードを次に示します。
import pickle
class foo:
def __init__(self,a):
self.a = a
def __str__(self):
return str(self.a)
obj = foo(1)
with open('junk','wb') as f:
pickle.dump(obj,f)
class foo:
def __init__(self,a,b):
self.a = a
self.b = b
def __str__(self):
return '%s %s'%(self.a,self.b)
def __getinitargs__(self):
return (self.a,self.b)
with open('junk','rb') as f:
obj = pickle.load(f)
print str(obj)