在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
答案 0 :(得分:1)
这是关于发生了什么的有根据的猜测;我实际上没有看过Python的REPL代码。如您所知,Python交互式shell在基于已解析前一行内容的预期进一步输入时使用...
提示符。
例如:
>>> if True:
...
...因为if ... :<newline>
必须跟随lexical structure of Python的缩进块。
请注意,除了空格之外,您可以使用空行来触发相同的奇怪行为,例如:
>>> <space><enter>
...
根据Python的词法规则,在大多数情况下,只包含空格的行不应被视为pass
语句或空块,但应该将其处理为,就好像它没有根本没出现。以这个例子为例(|
强调每行末尾缺少空格):
if False:|
|
print "Foo"|
# comment|
print "Bar"|
|
print "Baz"|
如果您运行此代码,它将仅打印Baz
。前两个print
语句被视为同一个块的一部分,尽管在它们之前,之后和之中存在非缩进的空行或仅注释行。
基本上,当Python解释器读取一行空白或仅包含注释时,它假装它根本不读取任何行。交互式解释器基本上遵循这种行为:它正在等待输入,如果它没有输入,它会要求更多输入。因此...
继续输入提示。
看起来完全空白行(切断EOL字符后line==''
)的情况特别适用于交互式解释器,但这个特殊 - 套管不会扩展到只包含注释和/或空格的行。
答案 1 :(得分:0)
这是提示,就像你输入def foo () :
并按回车一样,它会输出省略号(...)并自动为你提示一些提示。只是它的方式是说它接受你在做多行的事情。