Python IndexError超出范围

时间:2014-11-06 20:55:44

标签: python

这是我的程序

#!/usr/bin/python
import sys
fn=sys.argv[1]
dt=open(fn).readlines()
  for ln in dt:
    fd=ln.split()
    cntw=fd[1].count("W")
    print cntw

它完全读取文件,但最后给出错误:

Traceback (most recent call last):
  File "./task0.py", line 7, in <module>
    cntw=fd[1].count("W")
IndexError: list index out of range

为什么这个以及我需要改变什么?

2 个答案:

答案 0 :(得分:2)

你的最后一行是空的,跳过它:

for ln in dt:
    fd = ln.split()
    if not fd:
        continue

空行会产生一个空列表:

>>> ''.split()
[]

并且not fd测试适用于空容器。

请注意,您不必先将所有行读入内存;删除readlines()调用并直接遍历打开的文件对象;使用with语句让Python在完成后自动关闭它:

with open(fn) as fileobj:
    for ln in fileobj:
        fd = ln.split()
        if not fd:
            continue
        cntw = fd[1].count("W")
        print cntw

答案 1 :(得分:1)

该文件的内容有助于理解您要完成的任务,但这是一个更Pythonic的解决方案。您应该使用try和except语句来捕获异常并使用with关键字(如Martijn Pieters建议的那样)在完成后自动关闭文件。

此外,这不是20世纪90年代......我建议使用变量名来了解它们的用途。我不知道你要做什么,但我做了一些改变,试图明白这一点:)

#!/usr/bin/python
import sys
filename = sys.argv[1]

with open(filename) as datafile:
    for line in datafile:
        words = line.split()

        try:
            wcount = words[1].count("W")
        except IndexError:
            continue