【发布时间】:2014-05-31 05:45:15
【问题描述】:
几天来,我一直在玩弄泡菜,试图将它应用到“猜数字”练习程序的高分系统中。我以为我已经正确掌握了这个概念,但是现在出现了这个错误,我不知道为什么。
以下是相关代码:
def EnterHighScore(score,scoresList):
name = input("Enter your name: ")
newPlayer = player(name,score)
scoresList.append(newPlayer)
scoresFile = open('scores','wb')
pickle.dump(scoresList,scoresFile)
scoresFile.close()
for i in scoresList:
print(i.name + ' - ' + str(i.score))
def CheckHighScores(score):
try:
scoresFile = open('scores','rb')
except:
scoresFile = open('scores','wb+')
if not scoresFile.read(1):
scoresList = []
else:
scoresList = pickle.load(scoresFile)
scoresFile.close()
if not scoresList:
EnterHighScore(score,scoresList)
else:
for counter,i in enumerate(scoresList):
if counter == 3:
break
if score >= i.score:
EnterHighScore(score,scoresList)
break
当我运行它时,第一次运行正常。也就是说,当“分数”文件甚至不存在时。它被正确创建,scoresList 被创建为空,然后用一个播放器对象填充,它被转储到 scoreFile 中而没有任何错误。但是当我尝试使用新的“分数”文件数据加载 scoreList 时,它给了我以下错误:
UnpicklingError: Invalid load key'(heart)'
(heart) 代表一个实际的心脏字符。
我读到其他人也遇到过这个问题,但在那些情况下,他们试图在不同的操作系统中打开文件,或者在酸洗之后但在解酸之前以某种方式修改了文件。在这种情况下,文件根本没有被修改,只是写入并关闭。
我曾尝试在其他更简单的场景中使用 pickle,但没有导致其他错误。
任何帮助将不胜感激。
【问题讨论】: