2017-09-17 30 views
-1

Ich versuche, meinen Python-2-Code zu Python3 konvertieren, aber ich erhalte die folgenden Fehler:Kann nicht Bytes concat auf str (Konvertierung in Python3)

Traceback (most recent call last): 
    File "markovtest.py", line 73, in <module> 
    get_all_tweets("quit_cryan") 
    File "markovtest.py", line 41, in get_all_tweets 
    outtweets = [(tweet.text.encode("utf-8") + str(b" ")) for tweet in alltweets] 
    File "markovtest.py", line 41, in <listcomp> 
    outtweets = [(tweet.text.encode("utf-8") + str(b" ")) for tweet in alltweets] 
TypeError: can't concat bytes to str 

Das Problem in diesem for-Schleife ist:

Ich habe versucht, Codierung ändern, um den Encode-Parameter insgesamt zu decodieren oder zu entfernen, aber ich kann es nicht herausfinden. Jede Hilfe wäre willkommen.

+1

Führen Sie 2to3 auf Ihrem Code oder etwas, weil der Code in der Traceback nicht mit dem Quellcode übereinstimmt, den Sie angezeigt haben. – Blckknght

Antwort

0

Python3 hat mehrere verschiedene "String" -Typen. Details darüber, welche dort sind und was sie tun sollen, finden Sie unter here.

Sie versuchen, eine Byte-Zeichenfolge (im Grunde ein unveränderliches Zeichenarray) mit einer Unicode-Zeichenfolge zu kombinieren. Dies kann nicht (einfach) durchgeführt werden. Das Problem in Ihrem Code-Snippet besteht darin, dass der Tweet-Text, höchstwahrscheinlich eine Zeichenfolge, mit der Methode encode in Bytes konvertiert wird. Das funktioniert einwandfrei, aber wenn Sie versuchen, den Speicherplatz " " (der eine Zeichenfolge ist) mit dem Byte-Objekt zu verketten, tritt der Fehler auf. Sie können entweder die encode entfernen und die Verkettung als Zeichenfolgen ausführen (und möglicherweise später codieren) oder den Speicherplatz zu einem bytes-Objekt machen, indem Sie ein 'b' vor den Anführungszeichen setzen, wie dieses b" ".

Lassen Sie uns einen Blick auf Ihre Optionen nehmen:

In [1]: type("foo") 
Out[1]: str 

In [2]: type("foo".encode("utf-8")) 
Out[2]: bytes 

In [3]: "foo" + " " # str + str 
Out[3]: 'foo ' 

In [4]: "foo".encode("utf-8") + " " # str + bytes 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-4-5c7b745d9739> in <module>() 
----> 1 "foo".encode("utf-8") + " " 

TypeError: can't concat bytes to str 

In [5]: "foo".encode("utf-8") + b" " # bytes + bytes 
Out[5]: b'foo ' 

ich für Sie Problem erraten, wäre die einfachste Lösung der Raum ein Byte-String zu machen sein. Ich hoffe das hilft.

Verwandte Themen