шалун.UnpicklingError: не удалось найти Марка

у меня есть исключения вроде UnicodeDecodeError поднятый при мариновании (список) объектов EventFrame с членом участники это был пустой набор.

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

когда он не был пуст, проблем не было, поэтому я сначала установил участники к чему-то, а затем мариновал его. Но во время выполнения может случиться так, что участники снова опустели.

поэтому я попытался вручную удалить объект в этом случай. После этого я бросил его снова, используя рассол.

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

это не кажется хорошим выбором, потому что это UnpicklingError был поднят:

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

Я не знаю, что это значит, и я не мог найти ничего полезного об этом.

Примечание что эта ошибка возникает при загрузке файла рассол.

вот как я picklng и unpickling:

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()

и сброс:

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

1 ответов


ошибка _pickle.UnpicklingError: could not find MARK возникает, потому что смещение файла не находится в начале. Решение является вызов f.seek(0) перед загрузкой рассол.