2016-08-25 23 views
6

trzymam na uzyskiwanie ten błąd, gdy uruchomię następujący kod w Pythonie 3:TypeError: Nie jest wymagane, a nie „str” obiekt bajtów podobny - Pokemon iść technikę

fname1 = "auth_cache_%s" % username 
fname=fname1.encode(encoding='utf_8') 
#fname=fname1.encode() 
if os.path.isfile(fname,) and cached: 
    response = pickle.load(open(fname)) 
else: 
    response = self.heartbeat() 
    f = open(fname,"w") 
    pickle.dump(response, f) 

Tutaj jest błąd otrzymuję :

File "C:\Users\Dorien Xia\Desktop\Pokemon-Go-Bot-Working-Hack-API-master\pgoapi\pgoapi.py", line 345, in login 
    response = pickle.load(open(fname)) 
TypeError: a bytes-like object is required, not 'str' 

próbowałem konwersji fname1 do bajtów poprzez funkcję kodowania, ale to nadal nie jest ustalenie problemu. Czy ktoś może mi powiedzieć, co jest nie tak?

+1

Prawdopodobny duplikat [Używanie pickle.dump - TypeError: musi być str, nie bajty] (http://stackoverflow.com/questions/13906623/using-pickle-dump-typeerror-must-be-str-not- bajtów) –

Odpowiedz

9

Musisz otworzyć plik w trybie binarnym:

file = open(fname, 'rb') 
response = pickle.load(file) 
file.close() 

A pisząc:

file = open(fname, 'wb') 
pickle.dump(response, file) 
file.close() 
+0

Ehh, nadal daje mi błąd: –

+0

TypeError: nieprawidłowy plik: <_io.BufferedReader name = 'auth_cache_mavengences'> –

+0

Może to być problem z inną częścią kodu. Dziękujemy za pomoc! –

4

W Pythonie 3 trzeba specjalnie zadzwonić albo 'rb' lub 'wb'.

with open('C:\Users\Dorien Xia\Desktop\Pokemon-Go-Bot-Working-Hack-API-master\pgoapi\pgoapi.py', 'rb') as file: 
    data = pickle.load(file) 
0

Musisz zmienić "str" ​​na "bajty". Spróbuj tego:

class StrToBytes: 
    def __init__(self, fileobj): 
     self.fileobj = fileobj 
    def read(self, size): 
     return self.fileobj.read(size).encode() 
    def readline(self, size=-1): 
     return self.fileobj.readline(size).encode() 

with open(fname, 'r') as f: 
    obj = pickle.load(StrToBytes(f)) 
0

ciągle wracam do tego stosu linku przelewowym, więc jestem delegowania prawdziwą odpowiedź na następny raz przychodzę szuka go:

PickleDB jest pomieszane i musi być naprawiony.

Linia 201 pickledb.py

Od:

simplejson.dump(self.db, open(self.loco, 'wb')) 

do:

simplejson.dump(self.db, open(self.loco, 'wt')) 

Problem rozwiązany na zawsze.