2014-09-09 2 views
4

В интерпретаторе Python, если я помещаю в комментарий #, почему он запрашивает ...? Я ожидал подсказки >>>.Почему интерпретатор python запрашивает ... для комментария «#»?

например,

>>> # my comment 
... x = 4 
>>> x 
4 

>>> # my comment 
... foo 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
NameError: name 'foo' is not defined 
+4

Ожидается утверждение. Это пропущение комментария и подсказка для остальной части утверждения (отсюда «...»). Очень похоже на то, что команда содержит продолжение строки или несбалансированную круглую скобку. – isedev

+0

Я думаю, что лучше задать вопрос, почему вы пытаетесь ввести комментарии с помощью командной строки? – KronoS

+0

если это проблема, почему бы не поместить свои комментарии после, 'foo = 4 # foobar' –

ответ

1

Это мое образованное предположение о том, что происходит; Я на самом деле не смотрел код 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=='' после отрубив на оконечный символ (ы)) является специальным обсаженной в интерактивный интерпретатор, но этот специальный кожухотрубные не распространяются на линию, которые содержат только комментарии и/или пробелы.

0

Это приглашение, так же, как при вводе в def foo() : и нажмите клавишу ввода, он ставит многоточие (...) и с некоторыми подсказками автоматически закладками для вас. Это просто способ сказать, что он принимает, что вы делаете что-то по нескольким линиям.

+0

«что-то делать по нескольким строкам», но в случае «#» это однострочный «оператор». –

Смежные вопросы