为什么我得到“IndexError:list index out of range”错误?

时间:2013-11-26 19:41:43

标签: python indexing range

我想用文本文件中的新值替换某些值。我有一个包含旧值(c)的列表和一个包含新值的列表(item1)。 我的代码是:

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 = line.replace(c [x],iteml [x])”中出现了indexerror。

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

2 个答案:

答案 0 :(得分:0)

C [] 可能长152个元素,但是当您在 alt 上迭代并在每次迭代中将 x 递增1时,它是你的循环可能超过152次迭代,因为它取决于alt的长度。

一种可能的解决方案是在循环结束时添加if语句:

if (x == 152):
     break

因此,只要你的循环达到迭代次数152,就会完成它的执行,你就不会有任何IndexError。

答案 1 :(得分:0)

此问题是因为每个项目中的项目数量不一定相等,因此您不应对152之类的数字进行硬编码。

您之前发布了相同的代码。

尝试解决该问题的答案:https://stackoverflow.com/questions/20217097/how-to-ignore-following-characters-in-a-line/20217594#20217594