簡體   English   中英

無法將字節連接到str(轉換為Python3)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM