“列表索引超出范围”/辅助列表的空值

时间:2012-12-10 19:19:36

标签: python list null

我正在尝试在我的程序中添加一个新的部分,在我们的服务器上搜索机器人并删除它们,但我遇到一个停止显示的问题:每当程序到达第二部分(我是什么的) ve添加)'readFirst'的输出是'[]'。当接下来几行运行时,由于显而易见的原因,我得到“列表索引超出范围”错误。

我不知道为什么会发生这种情况,因为readlines变量不应该由程序的两个部分共享。

以下是代码:

while runTimes >= 0:
#Cycles through .php files
openedProg = glob.glob('*.php')
openedProg = openedProg[currentPhp:currentPhp+1]
progInput = ''.join(openedProg)
if progInput != '':
    theBot = open(progInput,'r')

    #Singles out "$output" on this particular line and closes the process
    readFourthFromBottom = theBot.readlines()
    wholeLine = (readFourthFromBottom[-4])
    output = wholeLine[4:11]

    #Singles out "set_time_limit(0)"
    readFirst = theBot.readlines()
    print(readFirst)
    wholeLine2 = (readFirst[0])
    output2 = wholeLine2[7:24]
    print(output2)

    theBot.close()
if progInput == '':
    currentPhp = -1

3 个答案:

答案 0 :(得分:1)

您在第一次读取行时读取所有行()。

第二次调用readlines时,它从文件末尾开始,所以没有什么可读的。

readFirst变量毫无价值,您已经在命名不佳的readFourthFromBottom变量中包含了所有行。

答案 1 :(得分:0)

readlines()一直读到文件流的末尾,这意味着光标位于文件的末尾。真的,这里的问题是readFourthFromBottom是一个不准确的变量名。它应该是all_lines,因为它将包含列表中文件的所有行。然后你应该使用它而不是试图重新读取readFirst中的行。

答案 2 :(得分:0)

readlines将读取IO对象中的所有行。因此,任何后续尝试从文件中读取内容都会产生EOF,因此第二个readlines将永远不会返回任何其他内容。

在再次使用readlines之前,您可以seek到文件的开头,或者甚至更好,只需重复使用您读过一次的行。除非您修改readFourthFromBottom(这是一个可怕的变量名称btw。),否则你没有理由再次阅读