簡體   English   中英

“ EOFError:超出輸入范圍”嘗試腌制時不斷出現此錯誤

[英]“EOFError: Ran out of input” Keep getting this error while trying to pickle

我正在編寫測驗程序。 我正在嘗試讓用戶有機會編寫和添加自己的問題。 我已經編寫了詢問和添加問題的函數。 我正在嘗試腌制問題列表,以便在有人添加問題時自動加載新問題。

這是我用來加載腌制文件的代碼。

sciIn = open('sciList.txt','rb')
sci = pickle.load(sciIn)
sciIn.close()

我在添加問題的函數中有此代碼。

sciOut = open("sciList.txt",'wb')
sci.append(dicQ)
pickle.dump(sci, sciOut)
sciOut.close()

當我運行代碼時,我得到EOFError:從輸入中退出,該輸入指向泡菜的裝載。 我不確定自己在做什么錯。 我正在使用Python3。感謝您的幫助!

完整代碼http://pastebin.com/HEp0KhRA

我認為您可能做得很正確,但是可能在某個時候從一個空文件中進行工作……如果在加載時執行此操作,則可能會出現奇怪的EOF錯誤。 另外,如果您以任何方式手動編輯了文件(或未使用pickle存儲數據),那么在加載時也會出現EOF錯誤。

這有效(但請注意,我將問題存儲為字典)。

>>> import pickle
>>> sciIn = open('sciList.txt', 'rb') # has 2 pickled dict entries already
>>> sci = pickle.load(sciIn)
>>> sci
{'what is a dog?': 'a dog', 'what kind of parrot is that?': 'a dead parrot'}
>>> sciIn.close()
>>> 
>>> sciOut = open('sciList.txt', 'wb')
>>> sci["what's your favorite colour?"] = "python"  
>>> pickle.dump(sci, sciOut)
>>> sciOut.close()

從您的代碼看來,您似乎在腌制一個列表而不是一個字典(因此,添加新問題的追加)。 上面的代碼也應該適用於列表,並且只需在代碼中添加即可。 無論如何,如果您嘗試使用pickle從空文件中讀取對象,則會收到EOF錯誤-但是,如果您從通過對空列表進行酸洗而創建的文件中啟動代碼,則不應出現EOF錯誤。

>>> import pickle
>>> sciIn = open('sciList2.txt', 'rb') # has a pickled empty list
>>> sci = pickle.load(sciIn)
>>> sci
['what is a dog?', 'what kind of parrot is that?']
>>> sciIn.close()
>>> 
>>> sciOut = open('sciList2.txt', 'wb')
>>> sci.append("what's your favorite color?")
>>> pickle.dump(sci, sciOut)
>>> sciOut.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM