为什么在Python中使用双分号作为SyntaxError?

ale*_*han 68 python syntax-error language-lawyer

我知道Python中不需要分号,但它们可以用于将多个语句塞入一行,例如

>>> x = 42; y = 54
Run Code Online (Sandbox Code Playgroud)

我一直认为分号相当于换行符.所以我有点惊讶(在推特上没有Ned Batchelder)双分号是一个SyntaxError:

>>> x = 42
>>> x = 42;
>>> x = 42;;
  File "<stdin>", line 1
    x = 42;;
           ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

我假设最后一个程序相当于x = 42\n\n.我以为分号之间的陈述被视为一个空行,一个无操作.显然不是.

为什么这是一个错误?

Aar*_*sen 104

从Python语法中,我们可以看到;未定义为\n.解析器在a之后需要另一个语句;,除非后面有换行符:

                     Semicolon w/ statement    Maybe a semicolon  Newline
                          \/     \/               \/                \/
simple_stmt: small_stmt (';' small_stmt)*        [';']            NEWLINE
Run Code Online (Sandbox Code Playgroud)

这就是为什么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
Run Code Online (Sandbox Code Playgroud)


Tig*_*kT3 23

pass即使您有分号,仍然需要空语句.

>>> x = 42;pass;
>>> x
42
Run Code Online (Sandbox Code Playgroud)

  • @SuperBiasedMan - 我说空话,不是空行. (3认同)