运算符优先级对于字符串和数字的工作方式是否相同?

时间:2013-08-24 17:34:00

标签: python string operator-precedence

虽然代码打高尔夫球,我偶然发现了一个奇怪的问题

>>> print '%'+'-+'[1]+str(5)+'s'%'*'

Traceback (most recent call last):
  File "<pyshell#178>", line 1, in <module>
    print '%'+'-+'[1]+str(5)+'s'%'*'
TypeError: not all arguments converted during string formatting

我的假设是操作员评估从左到右发生,但在这种特殊情况下,似乎即使其字符串操作% takes priority over +并尝试评估{{在连接之前1}}并且失败

这是一个已知的记录行为,还是有一些对我来说不明显的事情。

1 个答案:

答案 0 :(得分:4)

是的,它已记录在案here

无论操作对象如何,优先级在整个语言中都是一致的。任何其他东西都会令人非常困惑,因为可以使用“运算符”特殊方法构建对象 - 例如%__mod__() - 具有任意行为。如果对象也可以定义自己的优先级规则,则调试意外结果将变得更加困难。