Python练习错误

时间:2016-03-03 08:38:20

标签: python-2.7

我正在学习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

我不明白。请帮忙。谢谢。

2 个答案:

答案 0 :(得分:0)

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。这不会阻止你得到的那种错误,但它通常会产生更好看的代码,这可能更容易调试。

答案 1 :(得分:0)

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