2016-08-25 5 views
6

をハック行く:ここはTypeError:バイトのようなオブジェクトが必要な、ない「STR」 - ポケモンは、私は私のpython 3に次のコードを実行すると、このエラーを取得し続ける

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) 

は、私が取得エラーです:

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' 

エンコード関数を使用してfname1をバイトに変換しようとしましたが、まだ問題は解決されていません。誰かが何が間違っているか教えてくれますか?書き込み時に

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

をそして:

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

[pickle.dumpを使用する - TypeError:はバイトではなく、strでなければなりません](http://stackoverflow.com/questions/13906623/using-pickle-dump-typeerror-must-be-str-not-バイト) –

答えて

9

あなたはバイナリモードでファイルを開く必要があります。

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

まだ、私にエラーが表示されています: –

+0

TypeError:無効なファイル:<_io.BufferedReader name = 'auth_cache_mavengences'> –

+0

これはコードの他の部分で問題が発生している可能性があります。あなたの助けをありがとう! –

4

のPython 3では、あなたが、具体的は 'rb' または 'WB' のいずれかを呼び出す必要があり

0

'str'を 'bytes'に変更する必要があります。これを試してみてください:

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

私は、このスタックオーバーフローリンクに帰ってくるので、私は、私はそれを探しに来次回のために本当の答えを投稿しています:

PickleDBが台無しとする必要があります一定。

pickledb.py

のライン201から:

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

へ:永遠に解決

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

問題。

関連する問題