Это мое образованное предположение о том, что происходит; Я на самом деле не смотрел код REPL Python. Как вы знаете, интерактивная оболочка Python использует приглашение ...
, ожидая дальнейшего ввода, основываясь на анализе содержимого предыдущей строки.
Например:
>>> if True:
...
... потому что if ... :<newline>
должен сопровождаться отступом блока в соответствии с lexical structure of Python.
Обратите внимание, что вы можете вызвать такое же немного странное поведение с линией, которая является пустым для пробелов, за исключением, например:
>>> <space><enter>
...
В соответствии с лексическими правилами Python, в большинстве контекстов строка, которая содержит только пробелы не следует рассматривать как оператор pass
или пустой блок, но его следует обрабатывать , как если бы он вообще не отображался. Возьмем такой пример (с |
подчеркнуть отсутствие пробелов в конце каждой строки):
if False:|
|
print "Foo"|
# comment|
print "Bar"|
|
print "Baz"|
Если запустить этот код, он будет печатать только Baz
. Первые два оператора print
рассматриваются как часть одного и того же блока , несмотря на то, что перед, после и в середине из них есть незаписанные пустые строки или только строки комментариев.
В основном, когда интерпретатор Python читает строку, которая пуста или содержит только комментарий, она притворяется, что не прочитала никакой строки вообще. Интерактивный интерпретатор в основном следует этому поведению: он ждет ввода, и если он не получает ввода, он запрашивает больше ввода. Следовательно, продолжение ввода ввода ...
.
Оказывается, что случай совершенно пустого линии (line==''
после отрубив на оконечный символ (ы)) является специальным обсаженной в интерактивный интерпретатор, но этот специальный кожухотрубные не распространяются на линию, которые содержат только комментарии и/или пробелы.
Ожидается утверждение. Это пропущение комментария и подсказка для остальной части утверждения (отсюда «...»). Очень похоже на то, что команда содержит продолжение строки или несбалансированную круглую скобку. – isedev
Я думаю, что лучше задать вопрос, почему вы пытаетесь ввести комментарии с помощью командной строки? – KronoS
если это проблема, почему бы не поместить свои комментарии после, 'foo = 4 # foobar' –