web-dev-qa-db-ja.com

write()引数はバイトではなくstrでなければなりません

私は初心者プログラマーであり、絶対的な初心者のための本pythonを使用しています。私は、トリビアゲーム用の高得点関数を作成しようとして問題に遭遇しました。 (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の部分でエラーが発生しています。 (タイトルが示すように)引数の書き込みエラーが発生し続けます。

なぜそれらを文字列として認識しないのか分かりません。メイン関数で定義されている場合、実際には文字列です。

14
Austin Howard

Pythonを対象とした本を読んでいるようです。2. バイナリモード;でファイルを開く必要があります。モードにbを追加します。

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

本にこのような問題がさらに含まれている場合は、少なくとも本の演習を完了するために、Python 3をサポートするものに切り替えるか、Python 2.7をインストールするときがあります。

20
Martijn Pieters