我想知道以下代码是否有任何理由引发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
?
答案 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:可撤销:如果你考虑我给你看的东西,那么不是陈述所以(,)逗号不仅是多余的,而是错误的。