O argumento write () deve ser str, não bytes [duplicado]

Esta pergunta já tem uma resposta aqui:

Usando pickle.dump - TypeError: deve ser str, não bytes 2 respostas

Eu sou um programador iniciante e estou trabalhando no livro python para iniciantes absolutos. Me deparei com um problema ao tentar escrever uma função de pontuação alta para o jogo de trivia. quando a função 'highscore (user, highscore):' é chamada, tento atribuir os argumentos adequadamente para que eu possa selecionar as informações em um arquivo para uso posterior. no entanto, estou com um erro ao tentar despejar as informações necessárias.

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()

Como estou trabalhando no livro e também vi prateleiras em ação, tentei usá-las também, mas encontrei seu próprio conjunto de erros. então ignore os '#' neste momento.

na parte pickle.dump é onde estou gerando um erro. Eu continuo recebendo (como o título sugere) um erro de argumento de gravação.

Não entendo por que não os reconhece como string. como quando eles são definidos na função principal, é de fato uma string.

questionAnswers(1)

yourAnswerToTheQuestion