python - 为什么 python 解释器提示 ... 注释 "#"?

标签 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

最佳答案

这是我对正在发生的事情的有根据的猜测;我还没有真正看过 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/

相关文章:

javascript - Javascript 中的注释后是否有必要或正确加分号?

java - Java 中的注释

scala - 如何通过 Scala REPL 使用第三方库?

c# - C# : Create an Independent Callstack 中的解释器

python - 如何修改我的代码,以便列表中的图像显示在行和图 block 中?

python - 是否可以使用 Gmail-api 获取最近的 10 封电子邮件?

python - 如何替换字符串python中的正确字母

python - 为什么此方法在 Django 自定义管理器中不可见?

c# - 在c# xml注释中,如何引用其他方法特定的augment?

php - 如何确定 PHP 脚本处于终止阶段?