Python练习错误

问题描述:

我正在学习Python。 下面的代码:Python练习错误

def main(): 
fileName = raw_input("file name ") 
infile = open(fileName, "r") 
sm = 0.0 
ct = 0 
line = infile.readline() 
while line != "": 
    sm = sm + eval(line) 
    ct = ct + 1 
    line = infile.readline() 
print "\nAverage is ", sm/ct 

main() 

它导致以下错误:

Traceback (most recent call last): 
File "/home/sorin/avg6.py", line 13, in <module> 
main() 
File "/home/sorin/avg6.py", line 8, in main 
sm = sm + eval(line) 
File "<string>", line 1 

^ 
SyntaxError: unexpected EOF while parsing 

我不明白的方式。请帮忙。谢谢。

eval函数期望您传递给它的字符串是一个有效的Python表达式,但它得到一个空字符串(或者,给定while循环的条件,可能是一个只有空白的字符串)。这没有价值,所以会引发错误。

您可能希望查看数据文件以查看是否有空行(如果可以,请删除它们)。或者,您可以修改代码以忽略无效字符串:

while line != "": 
    try: 
     sm = sm + eval(line) 
     ct = ct + 1 
    except SyntaxError: 
     pass 

    line = infile.readline() 

如果您走这条路线,您可能还想捕获其他类型的错误。

另一种选择是明确的检查,可能出现了特定的无效的字符串(如只是一个裸换行符):

while line != "": 
    if line != "\n": # or maybe us "if line.strip()", to reject whitespace lines 
     sm = sm + eval(line) 
     ct = ct + 1 

    line = infile.readline() 

最后一个建议是使用for环文件对象上,而不是while循环拨打readline。这不会阻止你获得的错误类型,但它通常会导致更好看的代码,这可能更容易调试。

+0

谢谢。非常有用的答案。 – gerula

你的输入文件是什么样的?如果你的输入文件有一个空行,它会解释你的错误。

+0

这比较适合作为评论,而不是答案。 – Blckknght