2016-08-25 19 views
6

tôi tiếp tục nhận được lỗi này khi tôi chạy đoạn mã sau vào python 3:Lỗi Loại: một đối tượng byte giống như là bắt buộc, không phải là 'str' - Pokemon đi Hack

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) 

Đây là lỗi tôi nhận được :

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' 

Tôi đã thử chuyển đổi fname1 thành byte thông qua chức năng mã hóa nhưng vẫn chưa khắc phục được sự cố. Ai đó có thể cho tôi biết có chuyện gì không?

+1

Bản sao có thể có của [Sử dụng pickle.dump - TypeError: phải là str, chứ không phải byte] (http://stackoverflow.com/questions/13906623/using-pickle-dump-typeerror-must-be-str-not- byte) –

Trả lời

9

Bạn cần phải mở tập tin trong chế độ nhị phân:

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

Và khi viết:

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

Ehh, nó vẫn cho tôi lỗi: –

+0

LoạiError: tệp không hợp lệ: <_io.BufferedReader name = 'auth_cache_mavengences'> –

+0

Có thể có vấn đề với một số phần khác của mã. Cám ơn sự giúp đở cuả bạn! –

4

Trong Python 3 bạn cần phải đặc biệt gọi là 'rb' hoặc '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

Bạn cần thay đổi 'str' thành 'byte'. Hãy thử điều này:

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

tôi tiếp tục trở lại với liên kết tràn ngăn xếp này, vì vậy tôi đăng câu trả lời thực sự cho lần sau tôi đến tìm kiếm nó:

PickleDB là điều sai lầm và cần phải được đã sửa.

dòng 201 của pickledb.py

Từ:

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

tới:

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

Vấn đề giải quyết mãi mãi.

Các vấn đề liên quan