IndexError: список индексов вне диапазона, даже если я не ссылаюсь на значение, превышающее длину списка? - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть следующий код, который мне нужно запустить.

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

Я попытался заменить len (Solar) с 2, чтобы увидеть, является ли это проблемой, но появляется та же ошибка. Любые идеи о том, как решить эту проблему? Спасибо!

1 Ответ

1 голос
/ 22 февраля 2020

В файле есть пустые строки, которые следует пропустить.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...