【问题标题】:IndexError: list index out of range even though I do not reference a value greater than the length of the list?IndexError:即使我没有引用大于列表长度的值,列表索引也超出范围?
【发布时间】:2020-06-06 17:22:57
【问题描述】:

我必须运行以下代码。

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 以查看是否是问题所在,但出现了同样的错误。 关于如何解决这个问题的任何想法?谢谢!

【问题讨论】:

  • 代码假定元素的长度为 2 (element[1]) - 你确定这是真的吗?
  • 您实际询问的是哪个版本的 Python?
  • 我完全同意@balderman 唯一的问题是element[1]
  • 检查您的文件,确保所有行至少有 2 列。注意空行。特别是末尾可能有一个空行。
  • @Barmar 我想你明白了!当我打印元素时,最后一行是空白的。我如何删除它,因为我使用 '''element = line.split()''' 定义它

标签: python python-3.x list python-2.7 indexing


【解决方案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)

【讨论】:

  • 这似乎并没有摆脱我害怕的错误
  • 在 for 循环中添加 'if not element: continue' 来修复它!谢谢!!
  • 可能空白行上有空格。我已经更改了len(element) 的检查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多