2016-07-22 27 views
10

Jestem początkującym programistą i pracuję nad książką Python dla absolutnie początkujących. Natknąłem się na problem, próbując napisać funkcję wysokiej punktacji do gry ciekawostki. kiedy wywoływana jest funkcja "highscore (user, highscore):", próbuję odpowiednio przypisać argumenty, aby można było pobrać informacje do pliku do późniejszego wykorzystania. jednak wystąpił błąd podczas próby zrzucenia wymaganych informacji.Argument write() musi być str, nie bajtami

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

od czasu, gdy pracuję nad książką i widziałem półki w akcji, próbowałem również ich używać, ale napotkam na ich własny zestaw błędów. więc zignoruj ​​"#" w tym czasie.

w części pickle.dump jest miejscem, w którym generuję błąd. Wciąż otrzymuję (jak sugeruje tytuł) błąd argumentu zapisu.

Nie rozumiem, dlaczego nie rozpoznaje ich jako ciąg. jak wtedy, gdy są zdefiniowane w głównej funkcji, to jest to ciąg ..

+1

Spróbuj użyć trybu "ab". Ilekroć używasz 'pikle', zawsze powinno być' b' w trybie pliku. –

+0

Możesz znaleźć dodatkowe, dobre informacje na ten temat, wybierając Googling w tytule pytania. – TigerhawkT3

Odpowiedz

16

Wygląda na to, że pracujesz nad książką skierowaną do Pythona 2. Musisz otworzyć plik w trybie binarnym; dodać b do trybu:

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

Jeśli książka zawiera więcej problemów, takich jak te, być może nadszedł czas, aby przełączyć się na jeden, który obsługuje Python 3 lub zainstalować Python 2.7 przynajmniej dla celów realizacji ćwiczeń książek.

Powiązane problemy