2016-03-03 175 views
0

我正在學習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 

我不明白的方式。請幫忙。謝謝。

回答

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。這不會阻止你獲得的錯誤類型,但它通常會導致更好看的代碼,這可能更容易調試。

+0

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

0

你的輸入文件是什麼樣的?如果你的輸入文件有一個空行,它會解釋你的錯誤。

+0

這比較適合作爲評論,而不是答案。 – Blckknght