为什么如果x,y:引发一个SyntaxError?

时间:2014-03-29 21:16:02

标签: python if-statement syntax

我想知道以下代码是否有任何理由引发SyntaxError

>>> if 1,2:
  File "<stdin>", line 1
    if 1,2:
        ^
SyntaxError: invalid syntax
>>>

不应该将Python 1,2解释为两项元组(在if语句测试时,它会评估为True)?以下演示表明它应该:

>>> 1,2
(1, 2)
>>> tup = 1,2
>>> bool(tup)
True
>>>

此外,如果您查看Python的if语句的documentation,您将会读到:

if_stmt ::=  "if" expression ":" suite
             ( "elif" expression ":" suite )*
             ["else" ":" suite]

正如您所看到的,它清楚地表明if语句的语法是if关键字后跟表达式。如果我没弄错的话,1,2 确实是一个表达式。

最后,可以说这种语法没用,为什么要允许呢?这是事实,但Zen of Python明确地说:

  

特殊情况不足以打破规则。

为什么SyntaxError

2 个答案:

答案 0 :(得分:1)

how Python scans and interprets expressions有关。您得到SyntaxError,因为Python if语句不允许在条件之间使用逗号

Python从左到右读取语句,并用逗号分隔条件,除非明确使用括号进行分隔。这意味着您的表达式被解释为:

(1 == 1), (2)

所以tuple没有分开,而是两个条件。由于逗号不允许分隔条件,因此您获得SyntaxError。考虑到这一点,我们可以知道为什么将括号放在元组周围会得到不同的结果。括号明确用于分离,因此Python可以自己解释tuple并进行比较。在这种情况下,只有一个条件 - 所以没有错误。

答案 1 :(得分:-3)

你在做什么并不是你的想法。

1 == 1,2:你宣布两件事。 1 == 1 =真和2。

1 ==(1,2)= False:它们甚至是两种不同的类型。

如果1 == 1,2:可撤销:如果你考虑我给你看的东西,那么不是陈述所以(,)逗号不仅是多余的,而是错误的。