我遇到像 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()
答案 0 :(得分:7)
引发错误_pickle.UnpicklingError: could not find MARK
,因为文件的偏移量不在开头。解决方案是在加载pickle之前调用f.seek(0)
。
答案 1 :(得分:1)
我最初在_pickle.UnpicklingError: could not find MARK
时遇到此错误,但这是因为我在模块名称中使用了类名称。一旦删除它,它就像一个魅力!