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

时间:2014-10-15 19:15:25

标签: python

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

以下程序打印平方和,首先我尝试在终端上运行此问题,它提供" 语法错误:语法无效&#34 ;但是当在 vim 编辑器上复制相同的代码并在终端 python for.py 上运行时(该文件的名称为for.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上

$ 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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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