我一直在盯着这段代码一天半,谷歌没有帮助。它看起来很好,但它不断抛出错误。
程序会通过测验并在最后收集分数,如下所示:
print("That was the last question!")
print("Your final score is", score)
name = input('What is the players name? ')
highsc = highscore(score, name)
我知道得分有效,但当我输入球员名称时,它会尝试运行我的高分数定义:
def highscore(score, name):
entry = (score, name)
hs_data = open('tops.dat', 'rb')
highsc = pickle.load(hs_data)
hs_data.close()
hs_data = open('tops.dat', 'ab')
highsc.append(entry)
highsc.sort(reverse=True)
highsc = highsc[:5]
pickle.dump(highsc, hs_data)
hs_data.close()
return highsc
但我每次都得到同样的错误: -
File "C:\Users\Desktop\py3e_source\py3e_source\trivia_challenge.py", line 55, in highscore
highsc = pickle.load(hs_data)
File "C:\Python31\lib\pickle.py", line 1365, in load
encoding=encoding, errors=errors).load()
EOFError
请帮忙。
答案 0 :(得分:2)
您正在打开一个空文件,pickle
在找到 unpickle 之前已到达终点。您可以通过捕获EOFError
并在捕获时设置默认值来解决此问题。
这样的事情应该有效:
with open('tops.dat', 'rb') as hs_data:
try:
highsc = pickle.load(hs_data)
except EOFError:
highsc = []
答案 1 :(得分:0)
错误显示EOFError,表示您已到达文件末尾并且pickle未处于正常状态。在使用该功能之前是否填写了文件?
此外,以追加模式打开文件来编写新数据似乎不是一个好主意。 load读取整个文件,而不是在第一个对象之后丢弃字符,但是一旦添加了新的高分,文件中就会有两个高分对象,这也会导致错误。