+ -
当前位置:首页 → 问答吧 → 脚本报错:IndexError: list index out of range

脚本报错:IndexError: list index out of range

时间:2011-11-29

来源:互联网

Python code
j=0
d=os.listdir(DBDIR)
for j in range(0,len(d)-1):
     if d[j][-3:] != 'sql':
        del d[j]



这段代码为什么总是报IndexError: list index out of range啊

调试了一下,发现出错后,j的值是301

但我led(d)值是300,我已经限制range(0,299),为什么j值会超出啊

作者: leewgsheep   发布时间: 2011-11-29

你这种方式来做是会有问题的:
Python code
#coding:utf-8

def func1():
    list1=range(10)
    print list1
    for j in range(0,len(list1)):
        if list1[j]%2==0:
            del list1[j]
            print 'length:',len(list1),'  ',list1
        
def func2():
    list1=range(10)
    print list1
    for j in list1:
        if j%2==0:
            list1.remove(j)
            print 'length:',len(list1),'  ',list1

if __name__=='__main__':
    func2()
    print '#'*20
    func1()



应该像func2这样或者其它的方式来做

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
length: 9 [1, 2, 3, 4, 5, 6, 7, 8, 9]
length: 8 [1, 3, 4, 5, 6, 7, 8, 9]
length: 7 [1, 3, 5, 6, 7, 8, 9]
length: 6 [1, 3, 5, 7, 8, 9]
length: 5 [1, 3, 5, 7, 9]
####################
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
length: 9 [1, 2, 3, 4, 5, 6, 7, 8, 9]
length: 8 [1, 3, 4, 5, 6, 7, 8, 9]
length: 7 [1, 3, 5, 6, 7, 8, 9]
length: 6 [1, 3, 5, 7, 8, 9]
length: 5 [1, 3, 5, 7, 9]
Traceback (most recent call last):
  File "D:\temp\pp\temp.py", line 22, in <module>
  func1()
  File "D:\temp\pp\temp.py", line 7, in func1
  if list1[j]%2==0:
IndexError: list index out of range

作者: askandstudy   发布时间: 2011-11-29

用下标嘛,从后头往前循环,这样删除时比较妥当,列表不用从整效率也高些:
for j in range(len(j)-1, -1, -1):

或者改用一个副本做元素循环:
for j in d[:]:
..if j[-3:] != 'sql':
.....d.remove(j)

作者: angel_su   发布时间: 2011-11-29