IndexError:即使我没有引用大于列表长度的值,列表索引也超出范围?

问题描述 投票:-1回答:1

我必须运行以下代码。

Solar = ['Solar',['C','2.6915D-04'],['H','1.0000D+00'],['K','1.0715D-07'],['N','6.7608D-05'],['O','4.8978D-04'],['Ar','2.5119D-06'],['Cl','3.1623D-07'],['Fe','3.1623D-05'],['He','8.5114D-02'],['Mg','3.9811D-05'],['Na','1.7378D-06'],['Si','3.2359D-05'],['Ti','8.9125D-08']]

front = 'cond_initial'

fSolar = open(front+'_'+Solar[0]+'.dat','w')



fin = open(front+'.dat','r')
count = 0
for line in fin:
    count += 1
    if count <= 10: fSolar.write(line)
    if count > 10:
        element = line.split()
        sline = line
        for i in range(1,len(Solar)):
            if element[1] == Solar[i][0]:
                print(element[1])
                sline = line.replace('0.0000D+00',Solar[i][1],1)
        fSolar.write(sline)

但是,当我运行它时,出现以下错误:

    if element[1] == Solar[i][0]:
IndexError: list index out of range

我已经尝试用2替换len(Solar)来查看是否是问题所在,但是出现相同的错误。有关如何解决此问题的任何想法?谢谢!

python python-3.x list python-2.7 indexing
1个回答
1
投票

您在文件中有空白行,应将其跳过。

for line in fin:
    count += 1
    if count <= 10: fSolar.write(line)
    if count > 10:
        element = line.split()
        if len(element) < 2:
            continue # skip lines with < 2 columns
        sline = line
        for i in range(1,len(Solar)):
            if element[1] == Solar[i][0]:
                print(element[1])
                sline = line.replace('0.0000D+00',Solar[i][1],1)
        fSolar.write(sline)
© www.soinside.com 2019 - 2024. All rights reserved.