【问题标题】:Python: Errors saving and loading objects with pickle modulePython:使用pickle模块保存和加载对象时出错
【发布时间】:2011-06-02 05:14:45
【问题描述】:

我正在尝试使用这段代码加载和保存对象,这是我从一周前提出的一个问题中得到的: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' 

谁能解释一下这个错误信息的含义并告诉我如何解决这个问题?

非常感谢,新年快乐!!

【问题讨论】:

    标签: python object pickle


    【解决方案1】:

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

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

    【讨论】:

    • +1,以另一种方式:引发错误是因为 pickle 想要加载类 Fruits 的实例并搜索定义它的类定义,但它没有找到它它引发了错误。
    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 2020-12-18
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    相关资源
    最近更新 更多