Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7.8打印语句“;语法错误:无效语法”;在终端(Ubuntu14.04)中,但在vim上运行良好,为什么?_Python - Fatal编程技术网

Python 2.7.8打印语句“;语法错误:无效语法”;在终端(Ubuntu14.04)中,但在vim上运行良好,为什么?

Python 2.7.8打印语句“;语法错误:无效语法”;在终端(Ubuntu14.04)中,但在vim上运行良好,为什么?,python,Python,Python 2.7.8在终端(14.04)中打印语句“语法错误:无效语法”,但在vim上运行良好,为什么? Type "help", "copyright", "credits" or "license" for more information. >>> squares= [1, 4, 9, 16] >>> sum=0 >>> for num in squares: ... sum+=num ... print sum File

Python 2.7.8在终端(14.04)中打印语句“语法错误:无效语法”,但在vim上运行良好,为什么?

Type "help", "copyright", "credits" or "license" for more information.
>>> squares= [1, 4, 9, 16]
>>> sum=0
>>> for num in squares:
...     sum+=num
... print sum

File "<stdin>", line 3
  print sum
    ^
SyntaxError: invalid syntax
$ vim for.py
squares= [1, 4, 9, 16]
sum=0
for num in squares:
   sum+=num
print sum
下面的程序打印平方和,首先我尝试在终端上运行这个问题,它给出了“语法错误:无效语法”,但是当在vim编辑器上复制相同的代码并在终端上运行.py的python时(文件名为.py),没有错误,请解释原因

在终端上直接运行时

Type "help", "copyright", "credits" or "license" for more information.
>>> squares= [1, 4, 9, 16]
>>> sum=0
>>> for num in squares:
...     sum+=num
... print sum

File "<stdin>", line 3
  print sum
    ^
SyntaxError: invalid syntax
$ vim for.py
squares= [1, 4, 9, 16]
sum=0
for num in squares:
   sum+=num
print sum
python for.py

输出:30#运行正常

经过@mgilson和@ohope5的建议后,它开始工作了,谢谢

Type "help", "copyright", "credits" or "license" for more information.
>>> squares=[1, 4, 9, 16]
>>> sum=0
>>> for num in squares:
...     sum+=num
... 
>>> print sum
30

问题是,当以交互方式使用python时,必须在任何类型的循环或函数之后给出一个空行,否则它会认为下一行与此相关。这意味着在
sum+=num
之后,您需要在print语句之前留下一个空行。

REPL(read-evaluate-print循环)不能向前看下一行,以查看循环的结束方式是否与普通解析器相同。换句话说,当python的普通解析器解析文件时,它会看到dedent并知道循环在
sum+=num
之后结束。当REPL到达同一行时,它无法知道是否应该有另一条语句,因此它假定有另一条语句。告诉REPL这是循环的终端行(或者更一般地说,是任何命令集的结尾)的方法是输入一个空行