IndexError:列表索引超出范围:即使列表不是,也会出错

时间:2015-01-26 12:46:32

标签: python matplotlib python-3.4

我得到列表索引超出范围错误,即使它不是。我也附上我的CSV图像。

name=[]
value=[]
readFile=open('CsvMat.csv','r').read()
eachline=readFile.split('\n')


for line in eachline:
    split=line.split(',')
    name.append(split[0])
    value.append(split[1])

pos= arange(len(name))+.5
barh(pos,value,align='center',color='#b8ff5c')
yticks(pos,name)
show()

1 个答案:

答案 0 :(得分:0)

这里有两种可能性:

  1. 你的一行没有逗号。 split将只包含一个元素。
  2. 你有一个空行。 split是一个空列表。
  3. 无论哪种方式,你都要防范这种情况,或许是:

    if len(splits) < 2:
        continue
    

    跳过这些行。

    您正在阅读CSV文件;您可能希望避免重新发明CSV读取轮并使用此处的csv module

    import csv
    
    names = []
    values = []
    with open('CsvMat.csv', 'r', newline='') as readfile:
        for name, value, *remainder in csv.reader(readfile):
            names.append(name)
            values.append(float(value))
    

    请注意,我将name重命名为names,将value重命名为values,以反映这些是列表。我还将值转换为浮点数,以使它们可用于绘图中;如果它们是整数,则将float()替换为int()