【问题标题】:"EOFError: Ran out of input" Keep getting this error while trying to pickle“EOFError: Ran out of input” 尝试腌制时不断收到此错误
【发布时间】:2014-06-01 18:30:38
【问题描述】:

我正在编写一个测验程序。我试图让用户有机会编写和添加他们自己的问题。我已经编写了提问和添加问题的函数。我正在尝试腌制 问题列表,这样我就可以在有人添加新问题时自动加载新问题。

这是我用来加载腌制文件的代码。

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: Ran out of input 这指向泡菜的加载。我不确定我做错了什么。我正在使用 Python 3。感谢您的帮助!

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

【问题讨论】:

  • 请提供重现问题的最小可运行代码。我认为这里引用的代码行没有任何问题。

标签: python pickle eof


【解决方案1】:

我认为你可能正确地进行了酸洗,但可能在某些时候从一个空文件工作......如果你在加载时这样做,你可能会得到奇怪的 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 错误 - 但是,如果您从通过 pickle 空列表创建的文件开始您的代码,您应该'不会收到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()

【讨论】:

    猜你喜欢
    • 2022-12-12
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    相关资源
    最近更新 更多