在 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
最佳答案
这是我对正在发生的事情的有根据的猜测;我还没有真正看过 Python 的 REPL代码。如您所知,Python 交互式 shell 使用 ...
根据已解析前一行的内容,在期望进一步输入时提示。
例如:
>>> if True:
...
...因为if ... :<newline>
根据 lexical structure of Python 必须后跟一个缩进 block .
请注意,您可以使用除空格外为空的行来触发相同的稍微奇怪的行为,例如:
>>> <space><enter>
...
根据 Python 的词法规则,在大多数情况下,仅包含空格的行不应被视为 pass
。语句,或一个空 block ,但应该将其视为根本没有出现。以这个例子为例(用 |
强调每行末尾没有空格):
if False:|
|
print "Foo"|
# comment|
print "Bar"|
|
print "Baz"|
如果你运行这段代码,它只会打印Baz
.前两个print
语句被视为同一 block 的一部分尽管它们之前、之后和中间有非缩进的空行或仅注释行。
基本上,当 Python 解释器读取到空白行或仅包含注释的行时,它会假装它根本没有读取任何行。交互式解释器基本上遵循这种行为:它正在等待输入,如果没有输入,它会请求更多输入。因此 ...
继续输入提示。
似乎完全空白行的情况(line==''
切断 EOL 字符后)在交互式解释器中是特殊情况,但这种特殊情况是不扩展到仅包含注释和/或空格的行。
关于python - 为什么 python 解释器提示 ... 注释 "#"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25754123/