为什么python解释器会提示......发表评论"#"?

时间:2014-09-09 21:52:15

标签: python comments interpreter read-eval-print-loop

在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

2 个答案:

答案 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 () :并按回车一样,它会输出省略号(...)并自动为你提示一些提示。只是它的方式是说它接受你在做多行的事情。