热门标签:
Q:

Python语法错误与Python Anywhere

我在任何地方使用Python与DataCamp和Python,他们似乎不同意语法错误是什么。 我最近刚开始,所以我尝试了这行代码:

n = 5
while n > 0:
   print (n)
   n = n - 1
print ('Blastoff!')

它运行起来就像它应该在DataCamp上一样,但是使用Python Anywhere,我得到以下错误:

  File "<stdin>", line 5
    print ("Blastoff!")
        ^
SyntaxError: invalid syntax

不知道它在引用或试图告诉我什么。 错误消息是无益的,不知道为什么我在这里得到两个不同的评估。

原网址
A:

粘贴到interactive interpreter时,您必须在块语句之后,在下一条语句之前有一个空行。 下面是嵌入在上的Python Anywhere解释器的输出http://www.python.org

Python 3.6.0 (default, Jan 13 2017, 00:00:00) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> n = 5
>>> while n > 0:
...    print (n)
...    n = n - 1
... print ('Blastoff!')
  File "<stdin>", line 4
    print ('Blastoff!')
        ^
SyntaxError: invalid syntax
>>> 

将第一列中的任何内容写入...将导致此SyntaxError,即使在源文件中合法。 这是因为所有复合语句都传入exec(compile(... 'single'))完成后;python REPL在这里有点愚蠢,认为它只是一个语句,当它实际上是while后跟一个print时。

按enter键使提示符返回到>>>之前的print将解决交互式解释器中的问题:

Python 3.6.0 (default, Jan 13 2017, 00:00:00) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> n = 5
>>> while n > 0:
...    print (n)
...    n = n - 1
... 
5
4
3
2
1
>>> print ('Blastoff!')
Blastoff!
>>> 

但是请注意,while循环现在在复合语句终止后立即运行,即在>>>提示符再次显示之前。

除了标准的Python REPL之外,还有其他shell。 一个流行的ipython有一个控制台shell,它可以识别复制粘贴的内容并正确运行此内容:

% ipython
Python 3.5.3 (default, Jan 19 2017, 14:11:04) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.1.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: n = 5
   ...: while n > 0:
   ...:    print (n)
   ...:    n = n - 1
   ...: print ('Blastoff!')
   ...: 
5
4
3
2
1
Blastoff!

In [2]: 

所有回答

共 1 条

author avatar

PythonAnywhere和shell都将...中的任何内容视为第一条语句的一部分,这意味着在计算第一条语句时,应该执行以3个点开头的aifwithwhilefor之后的任何内容。

如果你有一个if语句,在...时输入的任何代码将在计算if语句时执行。

相似问题