【问题标题】:write() argument must be str, not bytes [duplicate]write() 参数必须是 str,而不是字节 [重复]
【发布时间】:2016-11-26 06:12:15
【问题描述】:

我是一名初学者程序员,正在为绝对初学者阅读 Python 书籍。我在尝试为琐事游戏编写高分函数时遇到了一个问题。当调用函数'highscore(user,highscore):'时,我尝试相应地分配参数,以便我可以将信息腌制到文件中以供以后使用。但是我在尝试转储所需信息时遇到了错误。

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 部分是我产生错误的地方。我不断收到(如标题所示)写入参数错误。

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

【问题讨论】:

  • 尝试使用ab 模式。每当您使用pickle 时,文件模式中应该始终有一个b。
  • 你可以通过谷歌搜索你的问题的标题找到一些额外的好信息。

标签: python string byte pickle


【解决方案1】:

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

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

如果您的书中包含更多此类问题,可能是时候切换到支持 Python 3 或安装 Python 2.7 的版本,至少为了完成本书练习。

【讨论】:

    猜你喜欢
    • 2020-12-03
    • 1970-01-01
    • 2021-02-02
    • 2017-07-17
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多