Python 2.7.8打印语句“;语法错误:无效语法”;在终端(Ubuntu14.04)中,但在vim上运行良好,为什么?
Python 2.7.8在终端(14.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
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这是循环的终端行(或者更一般地说,是任何命令集的结尾)的方法是输入一个空行