_pickle.UnpicklingError:找不到标记

2024-06-03 06:17:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一些异常,比如当用一个成员participants对EventFrame的对象(一个列表)进行pickling时引发的UnicodeDecodeError异常。

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

当它不是空的时候,就没有问题了,所以我首先设置参与者到某个地方,然后腌制它。但在运行时,可能会再次清空参与者

所以在这种情况下我试图手动删除对象。之后我又用泡菜把它扔了。

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

这似乎不是一个好的选择,因为提出了以下问题:

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

我不知道这意味着什么,我找不到任何有用的东西。

注意加载pickle文件时会引发此错误。

我就是这样拣来拣去的:

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

Tags: 对象self列表closeload成员open参与者