当尝试使用printf格式化时,“TypeError:cannot concatenate'str' and'int' objects”问题。

4

我认为这里没有问题,但Python却有不同的看法:

x = 3
y = 7
z = 2

print "I told to the Python, that the first variable is %d!" % x
print "Anyway, 2nd and 3rd variables sum is %d. :)" % y + z

我收到了TypeError: cannot concatenate 'str' and 'int' objects的错误提示。

为什么会出现这种情况呢?我没有将任何变量设置为字符串…至少我没有看到。


4
请注意,Python 目前推荐使用 str.format() 函数进行字符串格式化。例如:"Anyway, 2nd and 3rd variables sum is {0}. :)".format(y+z)(在 Python 2.7+中可以省略 0,此时占位符为 {})。 - JAB
2个回答

13

%+的优先级更高,因此s % y + z被解析为(s % y) + z

如果s是字符串,则s % x是字符串,并且(s % y) + z尝试将一个字符串(s % y的结果)和一个整数(z的值)相加。


8
您需要加括号: (y+z)

5
如果不是Python,它会认为你正在执行("Anyway %d" % y)+z。 - carlosdc
3
% 的优先级低于 +,所以 a % b + c 被解析为 (a % b) + c,而你想要的是 a % (b + c) - Dan D.
因为它使用 y 格式化字符串,然后尝试将格式化的字符串与 z 连接起来,这会导致错误,因为它们是不同类型的。 - nagisa
语法参考:http://docs.python.org/reference/expressions.html#binary-arithmetic-operations - Josh Lee
谢谢你们的答案!我感觉学习Python会非常有趣!:) - daGrevis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接