Pickle: TypeError: A Bytes-like Object Is Required, Not 'str'
I keep on getting this error when I run the following code in python 3: fname1 = 'auth_cache_%s' % username fname=fname1.encode(encoding='utf_8') #fname=fname1.encode() if os.path.
Solution 1:
You need to open the file in binary mode:
file = open(fname, 'rb')
response = pickle.load(file)
file.close()
And when writing:
file = open(fname, 'wb')
pickle.dump(response, file)
file.close()
As an aside, you should use with
to handle opening/closing files:
When reading:
with open(fname, 'rb') as file:
response = pickle.load(file)
And when writing:
with open(fname, 'wb') as file:
pickle.dump(response, file)
Solution 2:
In Python 3 you need to specifically call either 'rb' or '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)
Solution 3:
You need to change 'str' to 'bytes'. Try this:
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))
Solution 4:
I keep coming back to this stack overflow link, so I'm posting the real answer for the next time I come looking for it:
PickleDB is messed up and needs to be fixed.
Line 201 of pickledb.py
From:
simplejson.dump(self.db, open(self.loco, 'wb'))
to:
simplejson.dump(self.db, open(self.loco, 'wt'))
Problem solved forever.
Post a Comment for "Pickle: TypeError: A Bytes-like Object Is Required, Not 'str'"