python syntax-error language-lawyer

¿Por qué un punto y coma doble es un SyntaxError en Python?



syntax-error language-lawyer (2)

De la gramática de Python, podemos ver eso ; no se define como /n . El analizador espera otra declaración después de a ; , excepto si hay una nueva línea después:

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

Por eso x=42;; no funciona porque no hay una declaración entre los dos puntos y comas, ya que "nada" no es una declaración. Si hubiera alguna declaración completa entre ellos, como un pass o incluso solo un 0 , el código funcionaría.

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

Sé que los puntos y comas son innecesarios en Python, pero se pueden usar para agrupar varias declaraciones en una sola línea, por ejemplo

>>> x = 42; y = 54

Siempre pensé que un punto y coma era equivalente a un salto de línea. Así que me sorprendió un poco saber (h / t Ned Batchelder en Twitter ) que un punto y coma doble es un SyntaxError:

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

Supuse que el último programa era equivalente a x = 42/n/n . Pensé que la declaración entre los puntos y comas se trataba como una línea vacía, no operativa. Aparentemente no.

¿Por qué es esto un error?


Una declaración vacía aún necesita pass , incluso si tiene un punto y coma.

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