Почему двойная точка с запятой является синтаксической ошибкой в Python?


Я знаю, что точки с запятой не нужны в Python, но их можно использовать для записи нескольких операторов в одну строку, например

>>> x = 42; y = 54

Я всегда думал, что точка с запятой эквивалентна разрыву строки. Поэтому я был немного удивлен, узнав (h / t Нед Батчелдер в Твиттере) что двойная точка с запятой является синтаксической ошибкой:

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

я предположил, что последняя программа была эквивалентна x = 42nn. Я бы подумал, что заявление между точка с запятой рассматривается как пустая строка, пустой. Видимо, нет.

почему это ошибка?

2 65

2 ответа:

из грамматики 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

пустой оператор все еще нуждается pass, даже если у вас есть точка с запятой.

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