我遇到了一些异常,比如当用一个成员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()
由于文件的偏移量不在开头,因此引发了错误
_pickle.UnpicklingError: could not find MARK
。解决方案是在加载pickle之前调用f.seek(0)
。相关问题 更多 >
编程相关推荐