如何对列表索引进行错误检查

时间:2018-06-21 18:03:28

标签: python

我有一个read.log文件,其中包含诸如...

10.2.177.170 Tue Jun 19 03:30:55 CDT 2018
10.2.177.170 Tue Jun 19 03:31:03 CDT 2018
10.2.177.170 Tue Jun 19 03:31:04 CDT 2018
10.2.177.170 Tue Jun 19 03:32:04 CDT 2018
10.2.177.170 Tue Jun 19 03:33:04 CDT 2018

我的代码将读取倒数第三行并组合字符串。因此,正常输出为:

2018:19:03:32:04

我的问题是,如果只有4行或更少的数据行,例如

10.1.177.170 Tue Jun 19 03:30:55 CDT 2018
10.1.177.170 Tue Jun 19 03:31:03 CDT 2018
10.1.177.170 Tue Jun 19 03:31:04 CDT 2018
10.1.177.170 Tue Jun 19 03:32:04 CDT 2018

我遇到错误

    x1 = line.split()[0]
IndexError: list index out of range

如何进行错误检查或阻止它发生?我一直在尝试检查日志中有多少行,如果少于5行,请打印一条通知。有更好的选择吗?

def run():

    f = open('read.log', 'r')
    lnumber = dict()
    for num,line in enumerate(f,1):  
        x1 = line.split()[0]
        log_day  = line.split()[3]
        log_time = line.split()[4]
        log_year = line.split()[6]
        if x1 in lnumber:
            lnumber[x1].append((log_year + ":" + log_day + ":" + log_time))
        else:
            lnumber[x1] = [(num,log_time)]

    if x1 in lnumber and len(lnumber.get(x1,None)) > 2:

        # if there are less than 3 lines in document, this will fail

        line_time = (lnumber[x1][-3].__str__())
        print(line_time)
    else:
        print('nothing')
    f.close

run()

1 个答案:

答案 0 :(得分:0)

f.readlines()为您提供文件中的行列表。因此,您可以尝试读取文件中的所有行:

f = open('firewall.log', 'r')
lines = f.readlines()

如果行数少于或等于4,则退出:

if len(lines) <= 4:
    f.close()
    print("4 or less lines in file")
    exit()

您收到的IndexError是因为您正在一行上没有任何内容的情况下调用split()。我建议做类似if not line: continue的事情来避免这种情况。