¿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