IndexError:列表索引超出范围

时间:2016-11-07 17:07:33

标签: python for-loop dictionary text

我在Windows 10上使用32位的Python 3.5。

虽然我知道有关此错误消息的问题已被频繁询问和回答,但我仍然无法弄清楚为什么我的代码或相应的.txt文件实际上会导致此错误。

代码是来自Python初学者书籍的1:1副本以及此代码的衍生物,其中我只更改了字典的名称并使用了另一个.txt文件。

以下是代码:

woerter={}
fobj=open("Woerterbuch.txt","r")
for line in fobj:
   zuordnung=line.split(" ")
   woerter[zuordnung[0]] = zuordnung[1]
fobj.close()

print(woerter)

这是相应的.txt文件:

Spain Spanien
Germany Deutschland
Sweden Schweden
France Frankreich
Italy Italien

代码将产生以下错误:

    Traceback (most recent call last):
      File "C:\Users\Christian\Desktop\Python-Programme\Dateiausleseprogramm2.py", line 5, in <module>
        woerter[zuordnung[0]] = zuordnung[1]
    IndexError: list index out of range

1 个答案:

答案 0 :(得分:1)

您给定的代码和文件不会重现错误。但是,如果我向文件添加另一个换行符(空行),则 会产生您提供的错误。我删除了两个文件中的前导空格,并在代码中添加了几个跟踪打印语句:

woerter={}
fobj=open("Woerterbuch.txt","r")
for line in fobj:
   zuordnung=line.split(" ")
   woerter[zuordnung[0]] = zuordnung[1]
   print (zuordnung)
fobj.close()

print(fobj)
print(woerter)

如果输入文件末尾没有空白行,请获取我想要的输出:

['Spain', 'Spanien\n']
['Germany', 'Deutschland\n']
['Sweden', 'Schweden\n']
['France', 'Frankreich\n']
['Italy', 'Italien\n']
<_io.TextIOWrapper name='so.txt' mode='r' encoding='UTF-8'>
{'Germany': 'Deutschland\n', 'Sweden': 'Schweden\n', 'Italy': 'Italien\n', 'Spain': 'Spanien\n', 'France': 'Frankreich\n'}

使用空白行,我可以重现您的问题。 打印语句使直接原因显而易见:

['Spain', 'Spanien\n']
['Germany', 'Deutschland\n']
['Sweden', 'Schweden\n']
['France', 'Frankreich\n']
['Italy', 'Italien\n']
['\n']
Traceback (most recent call last):
  File "so.py", line 6, in <module>
    woerter[zuordnung[0]] = zuordnung[1]
IndexError: list index out of range

请注意,我从您发布的数据文件中删除了前导空格:这使得第一次拆分成为&#39;&#39;总是,还有两个字段。