2013-08-22 66 views
0

我是一名编写Python脚本的初学者程序员,他最终需要将三列内容拉出来并写入新的文本文件。在测试脚本时,我不断收到错误:IndexError: list index out of range应用于我需要拖动的第三列。Python检查列中是否存在列表

我的代码:

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") 

问:是否有另一种方式来检查柱存在,忽略,如果不不?

谢谢!

回答

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 Noneif not new_line[14]你要检查存在于14日指数的值,但是在Python如果没有这样的索引,然后IndexError提高。

(在像JavaScript undefined语言返回为不存在的指标,但是,这不是与Python的情况下)

+5

在Python中这是一种常见的做法,只是简单地尝试一些东西,而不是首先检查,如果它是可能的/现有的(EAFP样式(“它更容易请求宽恕比权限”)) –

0

该错误是由查询本身(new_line[14])引起的,所以你必须检查的长度行像if len(new_line) > 12。另一种方法是处理IndexError异常 - 两者都很好,通常程序员可以决定使用哪种方法。请参阅"Ask forgiveness not permission" - explain

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列丢失,则此代码不会按照您的预期运行。我们需要了解列中的内容以帮助您。