为什么Python 3的打印结束符“”会在解释器中生成异常,而不会从导入中生成异常?

时间:2018-07-16 21:20:36

标签: python

在Python 3中,这在从文件导入时有效:

myInt = 0
while (myInt < 10):
    print (myInt, end='')
    myInt += 1
print (' are Numerals.')

产生预期的结果:“ 0123456789是数字。”

但是,如果代码直接粘贴到解释器中,则最后一行会产生异常。实际上,在while块退出之后,一切都会发生:

    File "<stdin>", line 4
    print (' are  Numerals.')
        ^
SyntaxError: invalid syntax

[以下是对François的答复,重点是问题的形式。]

使用尾随","构造在Python 2中也不起作用...

在while块之后添加空白行不起作用,因为它显然不会产生所需的结果,即“ 0123456789是数字”。 但是,在让·弗朗索瓦(Jean-François)的领导下,会产生类似的结果:

myInt = 0
res=""
while (myInt < 10):
    res += str (myInt)
    myInt += 1

res += ' are my Numerals.'
print (res)

但是有什么方法可以强制在解释器中的while块的结尾使打印(或字符串编译,或其他方式)继续进行吗? 好吧,当我使用else并一次输入以下内容时,我可以产生结果:

>>> myInt = 0
>>> while (myInt < 10):
...     print (myInt, end='')
...     myInt += 1
... else:
...     print (' are Numerals.')
... 
0123456789 are Numerals.

但是当我将整个代码复制/粘贴到解释器中时,会引发异常。那么将复制粘贴到解释器中并一次键入一行有什么区别?我现在更好奇了!

1 个答案:

答案 0 :(得分:10)

解释器期望以非常特定的形式输入多行语句。您可以通过一次输入一行来看到这一点。

>>> myInt = 0
>>> while (myInt < 10):
...  print (myInt, end='')
...  myInt += 1
... print (' are Numerals')

在多行语句之后,解释器期望空白行表示块的结尾。当它立即遇到新的,不缩进的语句时,就会感到困惑。

while循环结束后添加空白行将使解释器理解您的块。请记住,Python解释器总是一次运行一个语句。复制粘贴多行时,实际上是将它们作为完全独立的语句运行,并且在解释器中,多行语句必须由换行符终止。