Pickle对象序列化异常求助:练习代码未按预期运行
排查Pickle练习代码问题的思路
嘿Diego!我注意到你在做Pickle相关的Python练习时遇到了代码不按预期运行的问题,先把你提供的现有代码整理出来,再一步步分析可能的问题点:
你提供的现有代码
import pickle class persona: def __init__(self, nombre, genero, edad): self.nombre = nombre self.genero = genero self.edad = edad print("se ha creado una persona nueva con el nombre de: ", self.nombre) def __str__(self): return "{} {} {}".format(self.nombre, self.genero, self.edad) class listaPersonas: pe... # 这里代码不完整啦!
核心问题推测&完整实现示例
看起来你的listaPersonas类代码没有写完,这大概率是导致功能异常的原因。我来给你补全一个完整的、能正常使用Pickle序列化/反序列化人员列表的实现,你可以对照排查:
import pickle class persona: def __init__(self, nombre, genero, edad): self.nombre = nombre self.genero = genero self.edad = edad print("se ha creado una persona nueva con el nombre de: ", self.nombre) def __str__(self): return "{} {} {}".format(self.nombre, self.genero, self.edad) class listaPersonas: def __init__(self): self.lista = [] # 初始化存储persona对象的列表 def agregar_persona(self, pers): self.lista.append(pers) # 添加人员到列表 def guardar_en_archivo(self, ruta): # 用pickle序列化列表到文件,注意用二进制写入模式wb with open(ruta, 'wb') as archivo: pickle.dump(self.lista, archivo) print("Lista de personas guardada correctamente!") def cargar_desde_archivo(self, ruta): # 从文件反序列化列表,用二进制读取模式rb try: with open(ruta, 'rb') as archivo: self.lista = pickle.load(archivo) print("Lista de personas cargada correctamente!") except FileNotFoundError: print("El archivo no existe, se creará una lista vacía.") # 测试代码 if __name__ == "__main__": # 创建人员列表对象 mi_lista = listaPersonas() # 添加几个测试人员 mi_lista.agregar_persona(persona("Maria", "Femenino", 28)) mi_lista.agregar_persona(persona("Juan", "Masculino", 32)) # 保存到文件 mi_lista.guardar_en_archivo("personas.pkl") # 重新加载测试 nueva_lista = listaPersonas() nueva_lista.cargar_desde_archivo("personas.pkl") # 打印加载后的人员信息 print("\nPersonas cargadas desde archivo:") for pers in nueva_lista.lista: print(pers)
关键注意事项(可能踩坑的点)
- 文件操作模式:使用Pickle时必须用二进制模式(
wb写入、rb读取),如果用文本模式会直接报错。 - 类定义的存在性:反序列化的时候,
persona类的定义必须在当前代码环境中存在,否则Pickle无法重建对象。 - 代码完整性:你的
listaPersonas类没有完成核心方法(比如存储列表、序列化方法),这会导致无法实现Pickle相关的功能。 - 异常处理:加载文件时最好处理
FileNotFoundError这类异常,避免程序直接崩溃。
你可以对照上面的完整代码,检查自己的实现哪里缺失或者有误,应该就能解决问题啦!
内容的提问来源于stack exchange,提问作者Diego Saravia
相关产品推荐
相关产品推荐

