[英]Can't concat bytes to str (Converting to Python3)
我正在嘗試將Python 2代碼轉換為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]
我嘗試過更改編碼以解碼或完全刪除編碼參數,但我無法弄清楚。 任何幫助,將不勝感激。
Python3有幾種不同的“字符串”類型。 有關存在哪些內容以及它們應該做什么的詳細信息,請參見此處 。
您正在嘗試將字節字符串(基本上是不可變的字符數組)組合為unicode字符串。 這不能(輕松地)完成。
您的代碼段中的問題是,tweet文本(很可能是字符串)已使用encode
方法轉換為字節。 這可以正常工作,但是當您嘗試將空格" "
(這是一個字符串)連接到bytes對象時,會發生錯誤。 您可以刪除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 '
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.