2016-03-18 76 views
-1

我想排序得分的平均數據,我從一個CSV文件中檢索,但是當我運行我的代碼,它拋出的錯誤:Python的錯誤:「IndexError:列表索引超出範圍」

row[1] = int(row[1]) 
IndexError: list index out of range 

我的代碼看起來是這樣的:

print("Would you like to see previous results?") 
    print("Press 1 to see previous results for your class. Press 2 to close the program") 
    answer = int(input()) 
    if answer == 1: 
     print("How would you like data to be sorted?") 
     print("Press 1 for average") 
     print("Press 2 for highest to lowest") 
     print("Press 3 for alphabetically") 
     sort_num = int(input()) 
     if sort_num == 1: 
      f = open("Class 2.csv") 
      csv_f = csv.reader(f) 
      newlist = [] 
      for row in csv_f: 
       row[1] = int(row[1]) 
       row[2] = int(row[2]) 
       row[3] = int(row[3]) 

       average = round(sum(row[1:3])/3) 
       row.append(average) 
       newlist.append(row[0:4]) 
      print(newlist) 

任何人都可以解釋爲什麼我有這樣的錯誤的節目我要去哪裏錯了嗎?

+2

'行'是空的或只有一個項目。就這樣。 – loutre

+0

你可以展示你的「Class 2.csv」的樣本嗎?現在我們只能說'沒有'行[1]''。有了樣本,我們可能會幫助您解決錯誤。 –

回答

0

嘗試執行發行操作之前打印行的內容。

f = open("Class 2.csv") 
     csv_f = csv.reader(f) 
     newlist = [] 
     for row in csv_f: 
      print("row == {} // type(row) == {}".format(row, type(row))) 
      row[1] = int(row[1]) 
      row[2] = int(row[2]) 
      row[3] = int(row[3]) 

如果行是空的或只包含一個元素,而在後一種情況下,你必須訪問的元素0(代碼:行[0]),你有這種類型的錯誤。

類型行的印刷是驗證行的類型(然而,我不認爲這行有從「名單」的類型不同)

希望這有助於你:-)

相關問題