Write() должен быть str, а не байтами

Я начинающий программист и работаю над книгой 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, где я генерирую ошибку. Я продолжаю получать (как говорит название) ошибку аргумента записи.

Я не понимаю, почему он не распознает их как строку. как если бы они были определены в основной функции, это действительно строка.

Ответ 1

Похоже, вы работаете над книгой, нацеленной на Python 2. Вам нужно открыть файл в двоичном режиме; добавьте b в режим:

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

Если ваша книга содержит больше таких проблем, возможно, пришло время переключиться на ту, которая поддерживает Python 3, или установить Python 2.7, по крайней мере, для завершения упражнений по книге.