4

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

>>> 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'%'*'在连接之前进行评估并失败

这是已知的记录行为,还是有更多对我来说不明显的东西。

4

1 回答 1

4

是的,它记录在这里

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

于 2013-08-24T17:45:10.850 回答