需要帮助我的python脚本显示索引错误

时间:2019-10-09 18:35:07

标签: python python-3.x index-error

从下面的配置中,我需要提取主机名和组名邻居x.x.x.x信息,

-设置系统主机名devicename_ABC

-设置协议bgp组内部组名称类型

设置协议bgp组组名邻居x.x.x.x

-set协议bgp group组名邻居z.z.z.z

我在python脚本下面编写了代码,但显示索引错误。请帮助我解决这个问题。

Python脚本:

        reDeviceName = re.compile(r'#\s*\n\s*host (\S*)\s*',re.DOTALL)
        deviceName = reDeviceName.findall(allText)
        regBbpGroup = re.compile(r'\s*bgp group (\S*)\s*',re.DOTALL)
        bpGroupList = regBbpGroup.findall(allText)
        numBbpGroup = len(bpGroupList)
        i = 0
        def temp(x):
            return x

        while i < numBbpGroup:
            requiredInfo = list(map(temp,bpGroupList[i]))
            requiredInfo.insert(0,deviceName[0]) (index error showing for this line)
            bpGroupList = str(requiredInfo[2])
            i = i + 1

3 个答案:

答案 0 :(得分:0)

numBbpGroup = len(bpGroupList) - 1

使用它,它将对您很好。 python中的Length函数从1开始计数,数组索引从0开始

答案 1 :(得分:0)

编辑:这不是当前IndexError的原因,但是,如果仅修复设备名称字符串regex表达式,则当{{1 }}。

将您的bpGroupList[i]循环更改为i = len(bpGroupList)循环。另一个答案建议从您的while变量中减去1,但是该变量的名称会引起误解。 for函数旨在以这种numBbpGroup方式进行操作。所以不用说

range

你可以说

minus 1

,它将正常工作。 while i < numBbpGroup: ... i = i + 1 将从1上升到for i in range(numBbpGroup): ... ,在for循环版本中,您不需要递增i

编辑:我觉得您的设备名称变量是一个空字符串,这是导致您看到索引错误的原因。

答案 2 :(得分:0)

您可以尝试使用这种积极的后向正则表达式吗?我假设您要在字符串host-name之后进行测试。

reDeviceName = re.compile(r'(?<=host-name).*')