2013-11-26 51 views
-1

我想用文本文件中的新值替换一些值。我有一个包含旧值的列表(c)和一个包含新值的列表(iteml)。 我的代码是:为什么我得到“IndexError:列表索引超出范围”错误?

def write_file(self): 

    iteml=[] 
    for row in range(152): 
      item=self.model.item(row,1) 
      item.text() 
      text=str(item.text()) 
      iteml.append(text) 



    alt=open("file","r") 
    neu=open("newfile","w") 

    x=0 
    for line in alt: 
     if line[0] == "|": 
      neu.write(line) 
     if line[0] != "|": 
      line=line.replace(c[x],iteml[x]) 
      x=x+1 
      neu.write(line) 

C []被定义全球性的,是152个元件长,所以我不知道为什么在 “行= line.replace(C [X],iteml [X])”出现索引错误。

当我使用“print(c)”或“print(iteml)”时,我得到整个列表......我的失败在哪里?

+3

你为什么不打印X上的错误前行,看到它的价值是什么...即时猜测它比数组大小... –

+0

读取文件中的行数大于152,不是吗? – Deck

+0

是的,你是对的。如果我在错误发生之前打印x,x计数到152.读取的文件有超过152行。 – Hubschr

回答

0

C []可能是152元长,但你迭代ALT并在每次迭代递增X一个,它可能是你的循环是做超过152次迭代,因为它依赖在alt的长度上。

一个可能的解决方案是在循环的末尾添加和if语句:

if (x == 152): 
    break 

所以每当你来到循环迭代NUM 152,将完成它的执行,你不会有任何IndexError。

相关问题