2017-03-19 84 views
0

我必須編寫一個程序,它將讀取文件中的數據,將其轉換爲整數和總量。到目前爲止,這是我的。數據文件「numdata.txt」中的數字是:78,93,85,100,81,76,94,77。從Python中的文件中讀取數據異常

def main(): 
total = 0 

try: 
    NumberFile = open('numdata.txt', 'r') 

    for line in NumberFile: 
     amount = float(line) 
     total += amount 
     print(format(total, ',.2f')) 

except IOError: 
    print('An error occurred trying to read the file.') 

except ValueError: 
    print('Non-numeric data found in the file.') 

except: 
    print('An error has occurred.') 

finally: 
    NumberFile.close() 


main() 

當我運行的第一個數字(78)被顯示的程序,然後異常錯誤消息之一出現時,奇怪的事情是,它是不同的,有時。如果有人能幫助我指出正確的方向,我會很感激。我對這個還很陌生,所以請耐心等待。

我試了又試,但不能得到循環才能正常工作,所以我結束了走這條路:

def main(): 
infile = open('numdata.txt', 'r') 
num1 = int(infile.readline()) 
num2 = int(infile.readline()) 
num3 = int(infile.readline()) 
num4 = int(infile.readline()) 
num5 = int(infile.readline()) 
num6 = int(infile.readline()) 
num7 = int(infile.readline()) 
num8 = int(infile.readline()) 
infile.close() 
total = num1+num2+num3+num4+num5+num6+num7+num8 
average = total/8 
print('the total: ', total) 
print('the average: ', average) 

的main()

它不漂亮,但它的工作原理我想笑

+0

能否請您重新格式化您的代碼? – mdegis

+0

抱歉,我沒有看到您的評論,我想我做了你所問的? – hppylttletrees

回答

0
total = 0  

try: 
    NumberFile = open('numdata.txt', 'r') 

    for line in NumberFile: 
     amount = float(line) 
     total += amount 
     print(format(total, ',.2f')) 
except IOError: 
    print('An error occurred trying to read the file.') 
except ValueError: 
    print('Non-numeric data found in the file.') 
except: 
    print('An error has occurred.') 
finally: 
    NumberFile.close() 

發生異常是因爲您在第一次迭代後立即關閉文件,導致您無法遍歷其餘部分。

NumberFile.close()移動到finally子句可確保無論出現什麼問題都會關閉該文件。但是,在Python中讀取/寫入文件的更好方法是使用with keyword,這是一種確保同樣內容的內置方法。

total = 0 

with open('numdata.txt', 'r') as f: 
    for line in f: 
     try: 
      total += float(line) 
     except ValueError: 
      print('Non-numeric data found in the file.') 
      continue 
     finally: 
      print('{:.2f}'.format(total, ',.2f')) 
+0

感謝您的反饋,我很感激。我有一個小問題,一旦數字全部加總,我會得到最後出現的值錯誤信息,有什麼辦法讓它不顯示出來?再次感謝您的幫助:) – hppylttletrees

+0

您的文件中有什麼樣的值?我懷疑你最好在for循環中移動'''try:/除了ValueError:'''。如果有例外情況,可能會打印出該值,以便知道導致問題的原因,然後在下一次迭代中繼續「繼續」。 – Roundel

+0

該文件只是一個普通的記事本文件。我會嘗試移動異常錯誤,看看我能否使它工作。我也在想,也許它總計總和,找到一個平均值並以百分比顯示。我是否需要添加一些編碼來查找平均值,然後將其轉換爲百分比?或格式化功能會照顧百分比部分? – hppylttletrees

0

您關閉在第一次迭代NumberFile.close()文件沒有正確地縮進