web-dev-qa-db-ja.com

PythonでダブルセミコロンがSyntaxErrorなのはなぜですか?

Pythonではセミコロンは不要ですが、複数のステートメントを1行に詰め込むために使用できます。

>>> x = 42; y = 54

セミコロンは改行と同等だといつも思っていました。だから、ダブルセミコロンがSyntaxErrorであることを知って少し驚いた(h/t TwitterのNed Batchelder ):

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

最後のプログラムはx = 42\n\n。セミコロンの間の文は、空行、無操作として扱われたと思っていたでしょう。どうやら。

なぜこれがエラーなのですか?

67
alexwlchan

Python文法から、;\nとして定義されていないことがわかります。パーサーは、;の後に別のステートメントが必要です。その後の改行:

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

x=42;;が機能しないのはそのためです。 「何もない」はステートメントではないため、2つのセミコロンの間にステートメントがないためです。 pass0のように、それらの間に完全なステートメントがある場合、コードは機能します。

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
104

空のステートメントには、セミコロンがあってもpassが必要です。

>>> x = 42;pass;
>>> x
42
23
TigerhawkT3