_pickle.UnpicklingError:找不到MARK

时间:2016-03-08 22:14:35

标签: python pickle

我遇到像 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

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

注意在加载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()   

2 个答案:

答案 0 :(得分:7)

引发错误_pickle.UnpicklingError: could not find MARK,因为文件的偏移量不在开头。解决方案是在加载pickle之前调用f.seek(0)

答案 1 :(得分:1)

我最初在_pickle.UnpicklingError: could not find MARK时遇到此错误,但这是因为我在模块名称中使用了类名称。一旦删除它,它就像一个魅力!