Python:使用pickle模块保存和加载对象时出错

时间:2011-01-01 11:58:25

标签: python object pickle

我正在尝试使用这段代码加载和保存对象我从一周前问过的问题中得到了它:Python: saving and loading objects and using pickle.

这段代码是这样的:

class Fruits: pass

banana = Fruits()    
banana.color = 'yellow'     
banana.value = 30

import pickle

filehandler = open("Fruits.obj","wb")    
pickle.dump(banana,filehandler)    
filehandler.close()

file = open("Fruits.obj",'rb')    
object_file = pickle.load(file)    
file.close()

print(object_file.color, object_file.value, sep=', ')

乍一看,这段代码效果很好,加载并查看保存对象的“颜色”和“值”。 但是,我追求的是关闭一个会话,打开一个新会话并加载我在过去会话中保存的内容。我在放行filehandler.close()之后关闭会话,然后我打开一个新的会话,然后我把剩下的代码放进去,然后在放object_file = pickle.load(file)之后我收到了这个错误:

Traceback (most recent call last): 
File "<pyshell#5>", line 1, in <module> 
object_file = pickle.load(file) 
File "C:\Python31\lib\pickle.py", line 1365, in load 
encoding=encoding, errors=errors).load() 
AttributeError: 'module' object has no attribute 'Fruits' 

任何人都可以解释一下这个错误信息的含义并告诉我如何解决这个问题吗?

非常感谢新年快乐!!

1 个答案:

答案 0 :(得分:3)

Python不会挑选整个类。只有名字。因此,您必须将包含它们的模块保存到文件中,并且在它们被打开时可导入。然后Python将重新导入它们。

如果遇到问题,您可能需要定义用于酸洗的特殊辅助方法__getstate____setstate__