为什么双分号是Python中的语法错误?

问题描述 投票:0回答:3

我知道分号在Python中是不必要的,但它们可以用来将多个语句塞到一行中,例如

>>> x = 42; y = 54

我一直以为分号就相当于换行符。所以我有点惊讶地得知(h/t Ned Batchelder on Twitter)双分号是语法错误:

>>> x = 42
>>> x = 42;
>>> x = 42;;
  File "<stdin>", line 1
    x = 42;;
           ^
SyntaxError: invalid syntax

我认为最后一个程序相当于

x = 42\n\n
。我本以为分号之间的语句被视为空行,无操作。显然不是。

为什么会出现这个错误?

python syntax-error language-lawyer
3个回答
104
投票

从Python语法中我们可以看到,

;
并没有被定义为
\n
。解析器期望在
;
之后有另一个语句,除非它后面有换行符:

                     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

22
投票

空语句仍然需要

pass
,即使你有分号。

>>> x = 42;pass;
>>> x
42

0
投票

打印(20);;打印(300)

Python 给出此代码的语法无效。

双分号在这里是一个错误,因为在Python中,当你在一行中写两行时,应该有一个分号而不是两个。因此,它有错误。

© www.soinside.com 2019 - 2024. All rights reserved.