我正在编写一个测验程序。我试图让用户有机会编写和添加他们自己的问题。我已经编写了询问和添加问题的函数。我想 pickle 问题列表,这样我就可以在有人添加问题时自动加载新问题。
这是我用来加载 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: Ran out of input,它指向 pickle 的加载。我不确定我做错了什么。我正在使用 Python 3。感谢您的帮助!
最佳答案
我认为您可能正在正确地进行 pickle ,但也许在某个时候从一个空文件开始工作……如果您在加载时这样做,您可能会遇到奇怪的 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()
关于python - "EOFError: Ran out of input"尝试 pickle 时不断出现此错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23983082/