为什么在Python中使用双分号是SyntaxError?
我知道在Python中分号是不必要的,但是它们可以用来将多个语句塞进一行,例如
>>> x = 42; y = 54
我一直认为分号相当于换行符。 所以我有点吃惊( Twitter上的Ned Batchelder ),双分号是SyntaxError:
>>> x = 42 >>> x = 42; >>> x = 42;; File "<stdin>", line 1 x = 42;; ^ SyntaxError: invalid syntax
我假设最后一个程序相当于x = 42\n\n
。 我本来以为分号之间的陈述是作为一个空行来处理的,一个空行。 显然不是。
为什么这是一个错误?
从Python语法,我们可以看到;
没有被定义为\n
。 parsing器期望在a之后的另一个语句;
,除非在它后面有换行符:
Semicolon w/ statement Maybe a semicolon Newline \/ \/ \/ \/ simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE
这就是为什么x=42;;
不起作用; 因为两个分号之间没有一个声明,因为“无”不是一个声明。 如果他们之间有任何完整的声明,如pass
,甚至只是一个0
,代码将工作。
x = 42;0; # Fine x = 42;pass; # Fine x = 42;; # Syntax error if x == 42:; print("Yes") # Syntax error - "if x == 42:" isn't a complete statement
一个空的语句仍然需要pass
,即使你有一个分号。
>>> x = 42;pass; >>> x 42