运算符优先级对字符串和数字的作用方式相同吗



在打代码时,我偶然发现了一个特殊的问题

>>> 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

我的假设是运算符求值从左到右进行,但在这种特殊情况下,即使其字符串操作,%似乎也比+优先,并试图在级联之前求值's'%'*',但失败

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

是的,这里有文档。

无论对哪个对象进行操作,整个语言的优先级都是一致的。其他任何事情都会非常令人困惑,因为可以用"运算符"特殊方法(如%__mod__())构造具有任意行为的对象。如果对象也可以定义自己的优先级规则,那么调试意外结果将变得更加困难。

最新更新