0

我是一名初学者程序员,正在编写一个 Python 脚本,最终需要提取三列的内容并将它们写入一个新的文本文件。测试脚本时,我不断收到错误消息:IndexError: list index out of range应用到我需要提取的第三列。

我的代码:

for ip in open("list.txt"):
    with open(ip.strip()+".txt", "a") as ip_file:
        for line in open("data.txt"):
            new_line = line.split(" ")
            if "blocked" in new_line:
                if "src="+ip.strip() in new_line:
                    ip_file.write(", " + new_line[11])
                    ip_file.write(", " + new_line[12])
                    ip_file.write(", " + new_line[14] + "\n")

在 中的几行中data.txt,没有第 15 列。我尝试了几种方法来避免错误消息,但我仍然收到错误:

if "src="+ip.strip() in new_line:
    ip_file.write(", " + new_line[11])
    ip_file.write(", " + new_line[12])
    if new_line[14] is None:
        pass
    else:
        ip_file.write(", " + new_line[14] + "\n")

if "src="+ip.strip() in new_line:
    ip_file.write(", " + new_line[11])
    ip_file.write(", " + new_line[12])
    if not new_line[14]:
        pass
    else:
        ip_file.write(", " + new_line[14] + "\n")

问题:是否有另一种方法来检查列是否存在,如果不存在则忽略?

谢谢!

4

3 回答 3

2

使用try-except

ip_file.write(", " + new_line[12])
try:
    ip_file.write(", " + new_line[14] + "\n")
except IndexError:
    pass

通过这样做if new_line[14] is None ,或者if not new_line[14]您正在尝试检查存在于第 14 个索引处的值,但在 python 中,如果没有这样的索引,IndexError则会引发。

(在像javascript这样的语言undefined中,不存在的索引会返回,但python不是这种情况)

于 2013-08-22T13:42:41.223 回答
0

该错误是由查找本身 ( new_line[14]) 引起的,因此您必须检查行的长度,例如if len(new_line) > 12. 另一种方法是处理IndexError异常——两者都很好,通常程序员可以决定使用哪种方法。请参阅“请求宽恕而不是许可” - 解释

于 2013-08-22T13:42:50.973 回答
0

使用try将避免您的异常。

try:
    ip_file.write(", " + new_line[11])
except IndexError:
    pass   
try:
    ip_file.write(", " + new_line[12])
except IndexError:
    pass
try:
    ip_file.write(", " + new_line[14])
except IndexError:
    ip_file.write("\n")

当您进行比较以查看它是否存在时,您得到了一个索引越界异常。

注意:
这可能不是您想要做的,因为每一列都可能是唯一的并且包含特定信息。如果缺少第 2 列,则此代码将不会按预期运行。我们需要知道列中的内容来帮助您。

于 2013-08-22T13:44:41.247 回答