2017-09-17 27 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 ' 

我想你的问题,最简单的解决办法是使空间的某个字节字符串。我希望这有帮助。

相关问题