在python中腌制数据

时间:2013-06-22 13:12:30

标签: python binary pickle

我一直在盯着这段代码一天半,谷歌没有帮助。它看起来很好,但它不断抛出错误。

程序会通过测验并在最后收集分数,如下所示:

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

请帮忙。

2 个答案:

答案 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读取整个文件,而不是在第一个对象之后丢弃字符,但是一旦添加了新的高分,文件中就会有两个高分对象,这也会导致错误。