为什么1 .__ add __(1)会产生语法错误?

时间:2012-02-07 13:46:26

标签: python

为什么

1.__add__(1)

收益率SyntaxError: invalid syntax?额外括号添加了什么?

(1).__add__(1)

3 个答案:

答案 0 :(得分:18)

这是令牌化工具的效果:1.__add__(1)被分为令牌"1.""__add__""(""1"和{{1}因为tokenizer总是试图构建最长的令牌。第一个标记是一个浮点数,后面紧跟一个标识符,这对解析器没有意义,因此抛出")"

只需在点之前添加一个空格即可:

SyntaxError

答案 1 :(得分:8)

因为1.是有效的浮点文字,而词法分析符遵循“最大符号”规则 - 使用最长匹配。将1.作为浮点字面值使用后,标识符__add__和parens会跟随。所有解析器都看到<float> <indentifier>是无效的(比较1.0 __add__(),这会产生相同的标记,我希望您看到它是如何语法错误的)并且毫无意义。在第二个示例中,表达式1包含在parens中,然后一个点(单个标记,由解析器选取作为属性访问运算符)等,这显然是有效的。< / p>

答案 2 :(得分:2)

解析器希望找到一个浮点数,但_不是有效数字。 parens告诉解析器在1之后停止解析。