IndexError:字符串索引超出范围

时间:2012-10-16 04:44:53

标签: python

此代码的第6行产生“IndexError:字符串索引超出范围”。我假设当我问“如果行[6]!=无”时,行中没有内容,但我无法弄清楚原因。我也尝试过使用!='',但问题出在此之前。

import csv
dict1={} 
list1 = csv.reader(open('014850_D_AA_20070207.txt'), delimiter='\t')
list1.next()    # skips the headers
for line in list1:
    if line[6] != None:
        dict1[line[0]]= (line[6] + ", " + line[11])
    else:
        continue    
print dict1

4 个答案:

答案 0 :(得分:2)

  1. Python索引从零开始,因此line[6]访问line的第7个元素。在这种情况下,line没有七个元素,因此失败。

  2. if line[6] != None不是检查某行是否没有内容的正确方法。请改用if len(line) < 7

  3. csv.DictReader是一个更好的界面,用于读取带有标题行的CSV文件。迭代它会将行作为字典,并将相应的标题项作为键,这使得代码更容易理解(与使用魔术索引相比)。

答案 1 :(得分:0)

尝试将第6行替换为:

if len(line) > 6:

但可能

if len(line) > 11:

更好,因为你使用下面的第[11]行。

当您将第[6]行测试为==时,您已经尝试访问第七行元素。如果行包含少于7个字符

,则会出现索引错误

答案 2 :(得分:0)

避免将其置于'try'块中并使用string.find()例如

[ - 1]用于获取字符串中的最后一个字符

也像

else:
 continue

不寻常

我差点忘了说:if string [5]!= None: 会引发一个indexerror,因为如果它没有,它将超出范围

答案 3 :(得分:0)

感谢所有有用的想法。我能够使用csv.DictReader解决我的问题,如下所示:

import csv
dictPI = {}
dictGS = {}
fh = open('014850_D_AA_20070207.txt')
for line in csv.DictReader(fh, delimiter='\t'):
    ProbeID = line['ProbeID']
    GeneSymbol = line['GeneSymbol']
    Description = line['Description']
    if GeneSymbol != '':
        dictPI[ProbeID] = GeneSymbol, Description
        dictGS.setdefault(GeneSymbol, []).append(ProbeID)