如何避免IndexError:列出索引超出上一行或下一行的范围

时间:2016-04-10 03:41:56

标签: python-3.x

我有一个带行的文本文件,按顺序:

line 1 
line 2 
line 3
line 4 
line 5 

现在,例如,如果文本文件中存在line 4,我需要按顺序显示相对于line 4的上一个或下一个字:previous line 3 next {{1} }}

line 5

如果data = open('file.txt', "r") searchlines = data.readlines() for q_numb, line in enumerate(searchlines): if ('line 4') in line: prev_line = searchlines[q_numb - 1] print ('"line 4" is found:',line, 'previous of "line 4" is:',prev_line) break data.close() IndexError: list index out of range来到不存在的行,如何避免[q_numb - 1]?我应该告诉它做别的事情,也许以某种方式预测它?但是,我该怎么做,如果[q_numb + 1]-来到不存在的行,我怎么知道做其他事情? (例如,在这种情况下只读取当前行。)

2 个答案:

答案 0 :(得分:0)

关键是检查当前行i的索引是否总是大于0且小于文件的长度,因此在任何时候总是有前一行和下一行。< / p>

with open('file.txt', 'r') as f:
    lines = f.readlines()
    for i, line in enumerate(lines):
        if 'line 3' in line and 0 < i < len(lines):
                print(lines[i - 1], line, lines[i + 1])

这将打印出第2行&#39;第3行&#39;第3行&#39;的前一行,当前行和下一行。和&#39;第4行&#39;并忽略&#39;第1行&#39;和&#39;第5行&#39;没有上一行和下一行要打印。

此外,使用with作为使用隐式close打开资源的惯用方法。

答案 1 :(得分:-1)

使用if声明:

data = open('file.txt', "r")
searchlines = data.readlines()
lines_len = len(searchlines)
for q_numb, line in enumerate(searchlines):
    if ('line 4') in line && 0 < q_numb < lines_len: #Here
        prev_line = searchlines[q_numb - 1]
        print ('"line 4" is found:',line, 'previous of "line 4" is:',prev_line)
        break
data.close()