这是有效的代码。
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
答案 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从左到右评估表达式。注意,在评估赋值时,右侧在左侧之前进行评估。”