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
。这不会阻止你获得的错误类型,但它通常会导致更好看的代码,这可能更容易调试。
谢谢。非常有用的答案。 – gerula