我得到的异常就像在使用一个空集的成员参与者的EventFrame的pickling(一个列表)对象时引发的UnicodeDecodeError.
class EventFrame:
"""Frame for an event"""
def __init__(self, id=0):
...
self.participants = set()
...
Run Code Online (Sandbox Code Playgroud)
当它不是空的时候,没有问题,所以我先把参与者设置成某种东西然后腌制它.但是在运行时期间,可能会再次清空参与者.
所以我尝试在这种情况下手动删除对象.之后,我再次使用泡菜将其倾倒.
if len(frame.participants) == 0:
frame_list.remove(frame)
Run Code Online (Sandbox Code Playgroud)
这似乎不是一个好的选择,因为这个UnpicklingError被引发:
....
frame_list.append (pickle.load(f))
_pickle.UnpicklingError: could not find MARK
Run Code Online (Sandbox Code Playgroud)
我不知道这意味着什么,我找不到任何有用的东西.
请注意,加载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()
Run Code Online (Sandbox Code Playgroud)
和倾销:
f = open("myfile", "r+b")
pickle.dump(frame_list, f)
f.close()
Run Code Online (Sandbox Code Playgroud)