【发布时间】:2016-03-08 22:14:35
【问题描述】:
当使用一个空集的成员 participants 腌制 EventFrame 的(列表)对象时,我遇到了像 UnicodeDecodeError 这样的异常。
class EventFrame:
"""Frame for an event"""
def __init__(self, id=0):
...
self.participants = set()
...
当它不为空时,没有问题,所以我先将 participants 设置为某个东西,然后对其进行腌制。但在运行期间,可能会发生 participants 再次被清空。
所以我尝试在这种情况下手动删除对象。之后我又用pickle把它扔了。
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()
【问题讨论】:
-
我必须删除文件并创建新文件,然后再次转储 frame_list。那行得通。