2016-07-22 84 views
10

我是一名初学者程序员,正在为绝对的初学者准备书籍python。我遇到了一个问题,试图为琐事游戏写出高分的功能。当函数'highscore(user,highscore):'被调用时,我尝试相应地分配参数,这样我就可以将信息腌制到一个文件中供以后使用。但是我遇到了一个错误,试图转储所需的信息。write()参数必须是str,而不是字节

def highscore(user, highscore): 
    '''stores the players score to a file.''' 
    import pickle, shelve 
    user = '' 
    highscore = 0 
    #Hscore = shelve.open('highscore.dat', 'c') 
    Hscore = open('highscore.txt', 'a') 
    pickle.dump(user, Hscore) 
    pickle.dump(highscore, Hscore) 
    #Hscore.sync() 
    Hscore.close() 

,因为我的工作,通过这本书,也看到在行动我使用他们太多,但碰上自己的一套错误的尝试货架。所以现在忽略'#'。

在部分pickle.dump是我产生错误的地方。我不断得到(如标题所示)写入参数错误。

我不明白为什么它不会将它们识别为字符串。因为当它们在主函数中被定义时,它确实是一个字符串。

+1

尝试使用'ab'模式。无论何时使用'pickle',在文件模式下都应该有'b'。 –

+0

您可以通过使用Google搜索您的问题标题找到其他一些有用的信息。 – TigerhawkT3

回答

16

看起来您正在通过一本针对Python 2的书。您需要打开文件二进制模式;添加b的模式:

Hscore = open('highscore.txt', 'ab') 

如果你的书包含了更多像这样的问题,它可能是时间切换到一个支持Python 3或安装Python 2.7完成本书练习的目的,至少。

相关问题