web-dev-qa-db-fra.com

L'argument write () doit être str, pas d'octets

Je suis un programmeur débutant et je travaille sur le livre python pour le débutant absolu. J'ai rencontré un problème en essayant d'écrire une fonction à score élevé pour le jeu-questionnaire. Lorsque la fonction 'highscore (utilisateur, meilleur score): 'est appelé J'essaie d'attribuer les arguments en conséquence afin de pouvoir décaper les informations dans un fichier pour une utilisation ultérieure. Cependant, je rencontre une erreur en essayant de vider les informations nécessaires.

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

depuis que je travaille sur le livre et que j'ai également vu des étagères en action, j'ai essayé de les utiliser aussi mais j'ai rencontré leur propre ensemble d'erreurs. ignorez donc les "#" pour le moment.

à la partie pickle.dump est l'endroit où je génère une erreur. Je reçois toujours (comme le titre le suggère) une erreur d'argument d'écriture.

Je ne comprends pas pourquoi il ne les reconnaît pas comme une chaîne. comme quand ils sont définis dans la fonction principale c'est bien une chaîne ..

14
Austin Howard

On dirait que vous travaillez sur un livre destiné à Python 2. Vous devez ouvrir votre fichier en mode binaire; ajoutez b au mode:

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

Si votre livre contient plus de problèmes comme ceux-ci, il peut être temps de passer à un qui prend en charge Python 3 ou d'installer Python 2.7 au moins pour les besoins de terminer les exercices du livre.

20
Martijn Pieters