我是一名初学程序员,编写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")
问题:是否有其他方法可以检查列是否存在,如果不存在则忽略?
谢谢!
答案 0 :(得分: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不是这种情况)
答案 1 :(得分:0)
错误是由查找本身(new_line[14]
)引起的,因此您必须检查行的长度,如if len(new_line) > 12
。另一种方法是处理IndexError
异常 - 两者都很好,通常程序员可以决定使用哪种方法。见"Ask forgiveness not permission" - explain
答案 2 :(得分: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列,则此代码将不会按预期运行。我们需要知道列中的内容可以帮助您。