0

我已经盯着这段代码看了一天半了,谷歌没有帮助。对我来说它看起来不错,但它不断抛出错误。

该程序运行一个测验并在最后收集一个分数,如下所示:

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

请帮忙。

4

2 回答 2

2

您正在打开一个空文件,在找到任何要unpicklepickle之前就已经结束。您可以通过捕获并在捕获时设置默认值来解决此问题。EOFError

像这样的东西应该工作:

with open('tops.dat', 'rb') as hs_data:
    try:
        highsc = pickle.load(hs_data)
    except EOFError:
        highsc = []
于 2013-06-22T14:21:08.453 回答
0

错误显示 EOFError,这意味着您已到达文件末尾并且 pickle 未处于正常状态。在使用该功能之前是否已填充文件?

此外,以附加模式打开文件以写入新数据似乎不是一个好主意。load 读取整个文件,不会丢弃第一个对象之后的字符,但是一旦添加了新的高分,文件中就有两个高分对象,这也会导致错误。

于 2013-06-22T13:32:44.357 回答