在打代码时,我偶然发现了一个特殊的问题
>>> 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__()
)构造具有任意行为的对象。如果对象也可以定义自己的优先级规则,那么调试意外结果将变得更加困难。