Почему двойная точка с запятой является синтаксической ошибкой в 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 ответа:
из грамматики 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