2016-03-08 328 views
4

我喜歡例外的UnicodeDecodeError 酸洗提出時(名單)EventFrame的對象有一個成員參與者那是一個空集。_pickle.UnpicklingError:找不到MARK

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文件時引發的。

這裏是我picklng和取儲存方式:

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

我必須刪除該文件並將其新建,然後再轉儲frame_list。這樣可行。 – Sadik

回答

3

錯誤_pickle.UnpicklingError: could not find MARK上升,因爲該文件的偏移量在一開始是沒有的。加載醬菜之前,解決方案是撥打f.seek(0)