2017-09-17 49 views
-1

我想我的Python 2的代碼轉換成Python3,但我收到以下錯誤:不能Concat的字節STR(轉換到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 

的問題是在這個for循環:

outtweets = [(tweet.text.encode("utf-8") + " ") for tweet in alltweets] 

我試過改變編碼來完全解碼或刪除編碼參數,但我無法弄清楚。任何幫助,將不勝感激。

+1

您是在代碼上運行2to3還是什麼,因爲回溯代碼與您顯示的源代碼不匹配。 – Blckknght

回答

0

Python3有幾種不同的「字符串」類型。有關哪些和他們應該做什麼的詳細信息可以在here找到。

您試圖將一個字節字符串(基本上是一個不可變的字符數組)結合到一個unicode字符串。這不能(容易)完成。

您的代碼片段中的問題在於,推文文本(很可能是字符串)通過encode方法轉換爲字節。這工作正常,但是當您嘗試將空間" "(它是一個字符串)連接到字節對象時發生錯誤。您可以刪除encode並以字符串形式進行連接(也可以稍後進行編碼),也可以在引用前加上'b'(如b" ")以使該空間成爲字節對象。

讓我們來看看你的選擇:

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 ' 

我想你的問題,最簡單的解決辦法是使空間的某個字節字符串。我希望這有幫助。

相關問題