2013-10-10 49 views
-3

我總是得到這個錯誤此代碼:Python的表錯誤

Traceback (most recent call last): 
    File "E:/ankosh/trial13.py", line 14, in <module> 
    if grades_mix[index_no]=="HM1": 
IndexError: list index out of range) 

我會很感激的幫助。

`file_pointer=open("C:/python27/Doc/student_grades.txt", "r") 

    read_grades=file_pointer.readline() 

    my_list=[] 

    while 0==0: 

    grades_mix=read_grades.split() 

    name_str=grades_mix[0] 

    contained_list=[name_str,0,0,0,0,0.0] 

    index_no=1 

    count_num=0 

sum_float=0.0 

avg_float=0.0 

while 0==0: 

     if grades_mix[index_no]=="HM1": 

      index_no+=1 

      grade_num=int(grades_mix[index_no]) 
     count_num+=1 
     sum_float+=grade_num 
     contained_list[1]=grade_num 
    elif grades_mix[index_no]=="HM2": 
     index_no+=1 
     grade_num=int(grades_mix[index_no]) 
     count_num+=1 
     sum_float+=grade_num 
     contained_list[2]=grade_num 
    elif grades_mix[index_no]=="HM3": 
     index_no+=1 
     grade_num=int(grades_mix[index_no]) 
     count_num+=1 
     sum_float+=grade_num 
     contained_list[3]=grade_num 
    elif grades_mix[index_no]=="HM4": 
     index_no+=1 
     grade_num=int(grades_mix[index_no]) 
     count_num+=1 
     sum_float+=grade_num 
     contained_list[4]=grade_num 

    index_no+=1 
if count_num>0: 
    avg_float=sum_float/count_num 
contained_list[5]=avg_float 
index_num=0 
while index_num<len(my_list): 
    if my_list[0]>name_str: 
     break 
    index_no+=1 
my_list.insert(index_num, contained_list) 
read_grades=file_pointer.readline() 
    file_pointer.close() 

    print format ("Name","<10")+" | "+format("HM1"," >5")+" | "+format("HM2"," >5")+" | "+format("HM3"," >5")+" | "+format("HM4"," >5")+" | "+format("avg_float"," <10")+" | " 

    for index_no in range(0, len(my_list)): 

    print format(my_list[index_num][0], "<10") + " | " + \ 

     format(my_list[index_num][1], " >5") + " | " + \ 

     format(my_list[index_num][2], " >5") + " | " + \ 

     format(my_list[index_num][3], " >5") + " | " + \ 

     format(my_list[index_num][4], " >5") + " | " + \ 

     format(my_list[index_num][5], " >10.2f") + " | " 
+4

您是否可以將代碼簡化爲演示問題的最小示例?也請檢查縮進,看起來破損。你可以[編輯]問題來解決這個問題。 –

+0

當你直接寫'True'時,你不想寫0 == 0。 – Christian

回答

3

你,縮寫爲:

while 0==0: 
    if grades_mix[index_no]=="HM1": 
     index_no+=1 

沒有break語句永遠走不出循環(其中,如何while True?)。遲早你會超出範圍。

+0

但其他人有基本相同的代碼沒有任何突破語句,它的工作很好? – Ankosh

+1

我猜這個問題是在'基本上'這個詞。沒有看到其他代碼,我無法幫助你。如果你有一個類似'lst = ['a','b','c']'的數組,並且你試圖獲得'lst [4]',你會得到你的錯誤。嘗試改變'while 0 == 0'爲'而index_no thumbtackthief

1

該錯誤消息

IndexError: list index out of range 

表示您正在使用不陣列中存在的索引。嘗試通過打印出其長度

打印檢查數組的大小「數組的長度grades_mix =」,LEN(grades_mix)

如果數組的長度小於或等於1,則在第一步中調用

grades_mix[index_no] 

index_no=1 

時會得到一個錯誤,這可能是你的文件包含空行或一個字,你需要ŧ o在你的腳本中注意這一點。

+0

我打印出陣列等級的長度, 它打印出來了7 – Ankosh

+0

那麼錯誤發生在你的(無限)循環中的6個步驟,你需要在到達該點之前停止循環 – user2314737