以UTF8格式编码str时出错

时间:2017-07-07 04:00:23

标签: string python-2.7 python-3.x

  

这是有效的代码。

line = 'line'
another_line = 'new ' + line
another_line.encode('utf-8')
  

输出

b'new line'

现在我想弄清楚为什么我在python3中得到以下代码的错误而不是我在python2中得到串联字符串?

line = 'line'
'new '+line.encode('utf-8')
  

TypeError:无法转换'字节'隐含地反对str

1 个答案:

答案 0 :(得分:1)

正如错误所述,Python3不会自动将字节类型转换为字符串(+运算符首先看到一个字符串,所以也想要一个右边的字符串)隐式(自动)所以你需要告诉它明确地这样做。

line = 'line'
print('new '+str(line.encode('utf-8')))

请注意,这会产生稍微不同的输出。

如果你想要完全相同的输出,那么这是有效的:

line = 'line'
print('new '.encode('utf-8')+line.encode('utf-8'))

来自docs

“+(加法)运算符产生其参数的总和。参数必须都是数字或两者都是相同类型的序列。在前一种情况下,数字转换为通用类型然后加在一起在后一种情况下,序列是连接的。“并且“Python从左到右评估表达式。注意,在评估赋值时,右侧在左侧之前进行评估。”