首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助我的python脚本显示索引错误

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

Stack Overflow用户
提问于 2019-10-09 18:35:07
回答 3查看 78关注 0票数 1

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

-set系统主机名devicename_ABC

-set协议bgp组-名称类型

-set协议bgp组-名称邻居x.x

-set协议bgp组-名称邻居Z.Z

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

Python脚本:

代码语言:javascript
复制
        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
EN

回答 3

Stack Overflow用户

发布于 2019-10-09 18:37:07

numBbpGroup = len(bpGroupList) - 1

使用这个,它会对你很好。python中的长度函数从1开始计数,数组索引从0开始。

票数 0
EN

Stack Overflow用户

发布于 2019-10-09 18:42:28

编辑:这不是当前IndexError的原因,但是如果您只修复了您的设备名称字符串正则表达式,那么当您尝试访问i = len(bpGroupList)时,您将得到另一个IndexError。

while循环更改为for循环。另一个答案是从您的numBbpGroup变量中减去1,但是变量的名称可能会产生误导。range函数被设计为以这种minus 1方式操作。所以不要说

代码语言:javascript
复制
while i < numBbpGroup:
    ...
    i = i + 1

你可以说

代码语言:javascript
复制
for i in range(numBbpGroup):
    ...

一切都会好起来的。i将从1上升到不需要在for-循环版本中增加inumBbpGroup - 1

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

票数 0
EN

Stack Overflow用户

发布于 2019-10-09 18:50:46

你能试一下这个正向后的正则表达式吗?我假设您希望在字符串host-name之后进行测试。

代码语言:javascript
复制
reDeviceName = re.compile(r'(?<=host-name).*')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58310268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档