IndexError:列表索引超出范围,对于re.match

时间:2014-12-18 05:29:06

标签: python

下面的

是我写的脚本的一部分,我在if语句中遇到了问题。 如果我想使用re.match('ATOM | MODEL',lines [i]),我收到错误信息。删除re.match中的“| MODEL”,它会起作用。 任何人都可以给我一些提示,为什么会这样?非常感谢你!

new_pdb=open(pdb_out,'w')
i=0
while (i<len(lines)):
    frag=lines[i].split()
# do not know why 'ATOM|MODEL' does not work
    if (re.match('ATOM',lines[i]) and "H" not in frag[2]):
        new_pdb.write(lines[i])
    i=i+1
new_pdb.close()

下面是我使用re.match('ATOM | MODEL',lines [i])时的错误消息:

追踪(最近一次通话):   文件“nonh-1.py”,第17行,in     if(re.match('ATOM | MODEL',lines [i])和“H”不在frag [2]中): IndexError:列表索引超出范围

1 个答案:

答案 0 :(得分:1)

lines开头的MODEL中至少有一个包含少于三个以空格分隔的项目,因此frag[2]失败。如果从正则表达式中删除|MODEL,则re.match()会失败,因此Python甚至不会尝试评估frag[2],这就是错误在该情况下不会发生的原因。

除此之外,你不应该使用lines循环迭代while - Python不是C.使用

for line in lines:
    frag = line.split()
    if (re.match('ATOM',line) and "H" not in frag[2]):
        new_pdb.write(line)