为什么此代码仅在我的CA上运行时才会抛出IndexError?

时间:2015-06-27 15:47:39

标签: python indexoutofboundsexception

我有一个包含姓名和分数的.csv文件。以下是文件内容(名称和分数在不同的列中):

Bob 1
Dave 6
Linda 9.76
Andy 90
hilary 87
mathew 6.4576589 

程序应显示从最高到最低的分数。像这样:

Bob 1
Dave 6
mathew 6.4576589 
Linda 9.76
hilary 89
Andy 90

我一直在尝试这个。以下是我的代码:

import csv
import operator
out_file = open('class1_scores_max.csv','r')
scores1 = csv.reader(out_file,delimiter=',')
sort = sorted(scores1,key = lambda x: float(x[1]))
for eachline in sort:
    final = eachline[0]," ",eachline[1]
    print (''.join(final))

这项工作完全在一个单独的python文件中,但在我在学校的主要控制评估中,它出现了错误:

IndexError: list index out of range

在我在学校的主要代码中,它是定义(子例程)的一部分。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

根据您提供的内容,您可以在这两行中获得IndexError

sort = sorted(scores1,key = lambda x: float(x[1]))

    final = eachline[0]," ",eachline[1]

我怀疑你IndexError位于第一行,因为在第二行获得IndexError似乎意味着它在第一行也会出现

您可以通过在排序和打印之前确保每行中有两个元素来解决此问题。

sort = sorted([x for x in scores1 if len(x) == 2], key = lambda x: float(x[1]))

这也是学习调试基础知识的好时机。假设您没有从互联网获得帮助,并且必须自己调试此问题。添加一些打印语句是调试代码的最快捷,最简单的方法之一。例如,

import csv
import operator
out_file = open('class1_scores_max.csv','r')
scores1 = csv.reader(out_file,delimiter=',')
for score in scores1:
    print score
sort = sorted(scores1,key = lambda x: float(x[1]))
for eachline in sort:
    final = eachline[0]," ",eachline[1]
    print (''.join(final))

请注意我插入以下行的位置:

for score in scores1:
    print score

这样,当您尝试访问{中的元素的第一个和第二个元素时,您可以查看scores1中是否有任何可能导致IndexError的内容{1}}。