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

需要帮助我的python脚本显示索引错误吗,python,python-3.x,index-error,Python,Python 3.x,Index Error,从下面的配置中,我需要提取主机名和组名邻居x.x.x.x信息 # -设置系统主机名devicename\u ABC -设置协议bgp组名称类型内部 -设置协议bgp组名邻居x.x.x.x -设置协议bgp组组名邻居z.z.z.z # 我写了下面的python脚本,但它显示了索引错误。请帮我解决这个问题 Python脚本: reDeviceName = re.compile(r'#\s*\n\s*host (\S*)\s*',re.DOTALL) deviceNam

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

# -设置系统主机名devicename\u ABC

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

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

-设置协议bgp组组名邻居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
reDeviceName=re.compile(r'#\s*\n\s*主机(\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温度(x):
返回x
而我在这一组:
requireInfo=列表(映射(temp,bpGroupList[i]))
requireInfo.insert(0,deviceName[0])(此行显示索引错误)
bpGroupList=str(requireInfo[2])
i=i+1
numBbpGroup=len(bpGroupList)-1

使用这个,它会很好地为你工作。python中的Length函数从1开始计数,数组索引从0开始


使用这个,它会很好地为你工作。python中的Length函数从1开始计数,数组索引从0开始编辑:这不是当前
索引器的原因,但是如果只修复设备名称字符串正则表达式,当
i=len(bpGroupList)
尝试访问
bpGroupList[i]
时,您将得到另一个索引器

while
循环更改为
for
循环。另一个答案建议从
numBbpGroup
变量中减去1,但是变量的名称可能会产生误导。
范围
功能设计为以这种
负1
方式运行。因此,与其说

而我
你可以说

范围内i的
(组):
...
它会很好的工作
i
将从1变为
numBbpGroup-1
,您不需要在for循环版本中增加
i


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

编辑:这不是当前
索引器的原因,但是如果您只修复设备名称字符串regex表达式,当您尝试在
i=len(bpGroupList)
时访问
bpGroupList[i]
时,您将获得另一个索引器

while
循环更改为
for
循环。另一个答案建议从
numBbpGroup
变量中减去1,但是变量的名称可能会产生误导。
范围
功能设计为以这种
负1
方式运行。因此,与其说

而我
你可以说

范围内i的
(组):
...
它会很好的工作
i
将从1变为
numBbpGroup-1
,您不需要在for循环版本中增加
i


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

你能试试正则表达式后面的这种积极的外观吗?我假设您希望在字符串
主机名
之后进行测试

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

reDeviceName=re.compile(r')(?你能试试正则表达式后面的这个积极的外观吗?我假设你想在字符串
主机名之后进行测试

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

reDeviceName=re.compile(r'(?可能需要查看
allText
中的内容。所有文本都包含以下信息--设置系统主机名设备名称\u ABC-设置协议bgp组组名类型内部-设置协议bgp组名邻居x.x.x.x-设置协议bgp组名邻居z.z.zI不认为这是用于
reDeviceName
。您希望该模式返回什么?我想从路由器命令行收集设备名称和BGP组名称正确的命令应该是什么可能需要查看
allText
中的内容。所有文本包含以下信息--设置系统主机名devicename\u ABC-设置协议BGP组名称类型内部-设置protocols bgp group name neighbor x.x.x.x-设置协议bgp group name neighbor z.z.z.zI不认为这是用于
reDeviceName
的正确正则表达式。您希望该模式返回什么?我想从路由器命令行收集设备名称和bgp组名称正确的命令用于什么循环但仍然索引显示错误…我想在此处发布完整脚本,但大小太大。如果您看到完整脚本,您可能会发现问题,如果
索引器仍在同一行上发生(您说
deviceName[0]
)然后你需要做一些调试,弄清楚什么是
deviceName
。使用你的IDE,弄清楚如何使用集成调试器,并在这一行的前面设置一个断点。知道如何使用调试器是一项非常有价值的技能,这是一个很好的机会。用于循环,但仍然显示索引错误ant无法在此处发布完整脚本,但大小太大。如果看到完整脚本,您可能会发现问题,如果
索引器仍在同一行上(您说
deviceName[0]
)然后,您需要进行一些调试,并弄清楚什么是
deviceName
。使用IDE,弄清楚如何使用集成调试器,并在此行前设置断点。了解如何使用调试器是一个非常重要的步骤