需要帮助我的 python 脚本显示索引错误
Posted
技术标签:
【中文标题】需要帮助我的 python 脚本显示索引错误【英文标题】:Need help my python script showing index error 【发布时间】:2020-02-07 03:39:35 【问题描述】:从下面的配置中,我需要提取主机名和组名邻居 x.x.x.x 信息,
#
-设置系统主机名devicename_ABC
-set protocols bgp group 组名类型内部
-set protocols bgp group 组名邻居 x.x.x.x
-set protocols 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
【问题讨论】:
可能需要看看allText
里面有什么。
所有文本包含以下信息 --set system host-name devicename_ABC -set protocols bgp group Group-name type internal -set protocols bgp group Group-name neighbor xxxx -set protocols bgp group Group-name neighbor zzzz
我认为这不是用于reDeviceName
的正确正则表达式。您希望该模式返回什么?
我想从路由器命令行收集设备名称和 BGP 组名称应该是正确的命令
【参考方案1】:
numBbpGroup = len(bpGroupList) - 1
使用它,它会很好地为您服务。 python中的length函数从1开始计数,数组索引从0开始
【讨论】:
尝试打印设备名称。也许它是空的,并且您没有正确的回复。【参考方案2】:编辑:这不是你当前IndexError
的原因,但是如果你只修复你的设备名称字符串正则表达式,当你尝试访问bpGroupList[i]
时,你会得到另一个IndexError i = len(bpGroupList)
。
将您的 while
循环更改为 for
循环。另一个答案建议从您的 numBbpGroup
变量中减去 1,但是变量的名称会产生误导。 range
函数旨在以这种minus 1
方式运行。所以不要说
while i < numBbpGroup:
...
i = i + 1
你可以说
for i in range(numBbpGroup):
...
它会正常工作。 i
将从 1 上升到 numBbpGroup - 1
,您不需要在 for 循环版本中增加 i
。
编辑:我感觉您的设备名称变量是一个空字符串,这就是导致您看到的索引错误的原因。
【讨论】:
用于循环但仍显示索引错误...我想在此处发布完整脚本但大小太大。如果您看到完整的脚本,您可能会发现问题 如果IndexError
仍然发生在同一行(您说deviceName[0]
),那么您需要进行一些调试并弄清楚deviceName
到底是什么。使用您的 IDE,弄清楚如何使用集成调试器并在此行之前设置一个断点。知道如何使用调试器是一项非常宝贵的技能,这是一个绝佳的机会。【参考方案3】:
你可以试试这个积极的后向正则表达式吗?我假设您想要在字符串host-name
之后进行测试。
reDeviceName = re.compile(r'(?<=host-name).*')
【讨论】:
你能print(len(deviceName))
吗?我猜是0
。
我的正则表达式有错字。脱掉最后一个)
。我编辑了我的答案。以上是关于需要帮助我的 python 脚本显示索引错误的主要内容,如果未能解决你的问题,请参考以下文章
在 Tkinter GUI 中显示 Python 脚本的输出
在没有任何参数的情况下调用脚本时使用 Python argparse 显示帮助消息