_pickle.UnpicklingError: no se pudo encontrar MARK

Obtuve excepciones como UnicodeDecodeError que se generó al seleccionar (una lista de) objetos de EventFrame con un miembro participante que era un conjunto vacío.

class EventFrame: """Frame for an event""" def __init__(self, id=0): ... self.participants = set() ... 

Cuando no estaba vacío, no hubo problemas, por lo que primero puse a los participantes en algo y luego lo comí. Pero durante el tiempo de ejecución puede suceder que los participantes se vuelvan a vaciar.

Así que traté de eliminar manualmente el objeto en este caso. Después de eso lo volví a tirar usando pickle.

 if len(frame.participants) == 0: frame_list.remove(frame) 

Esa no parece ser una buena opción, porque este UnpicklingError se planteó:

 .... frame_list.append (pickle.load(f)) _pickle.UnpicklingError: could not find MARK 

No sé lo que significa y no pude encontrar nada útil al respecto.

Tenga en cuenta que este error se produce al cargar el archivo pickle.

Esta es la forma en que estoy recogiendo y deshaciendo:

 f = open("myfile", "r+b") frame_list = [] while 1: try: frame_list.append (pickle.load(f)) frame_list = sum(frame_list, []) except EOFError: break f.close() 

y el dumping:

 f = open("myfile", "r+b") pickle.dump(frame_list, f) f.close() 

El error _pickle.UnpicklingError: could not find MARK produce porque el desplazamiento del archivo no está al principio. La solución es llamar a f.seek(0) antes de cargar el pickle.