为什么在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