请求的列表索引超出范围错误帮助

2024-09-28 05:21:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图获取bgp_摘要字符串中每行的第一项,并创建一个新的列表。为此,我使用下面的代码,但出现“列表索引超出范围”错误。我相信我所指的列表索引没有超出范围,但不确定为什么会发生这种错误。 如果有人能帮忙,我将不胜感激

bgp_summary = """

10.0.13.213     65510    658     86       0       0  2d 3:43:06 Establ
172.46.42.134   65513    819     7        0      11  2d 3:50:49 Establ
172.57.13.1     65501    15427   52       0       0  0d 2:26:01 Establ
172.57.13.249   65513    13449   2517     0       0  2d 3:50:21 Establ
172.57.13.250   65513    134     2515     0       0  4d 3:50:21 Establ
172.57.13.252   65513    46      142      0       0     3:50:32 Establ

"""

bgp_peers_list_raw = []
bgp_peers_list_refined = []
bgp_peers_list_raw = bgp_summary.splitlines()

n=0
for n in range (len(bgp_peers_list_raw)):
    list_raw1 = []
    list_raw1 = bgp_peers_list_raw[n].split()
    bgp_peers_list_refined.append(list_raw1[0])


bgp_peers_list_refined.append(list_raw1[0])
IndexError: list index out of range

Tags: 字符串代码列表raw错误rangesummarylist
2条回答

你的一些行是空的。如果您放弃以下内容:

代码:

bgp_peers_list_raw = [l.strip() for l in bgp_summary.splitlines() 
                      if l.strip()]

它会很好用的

测试代码:

bgp_summary = """

10.0.13.213     65510    658     86       0       0  2d 3:43:06 Establ
172.46.42.134   65513    819     7        0      11  2d 3:50:49 Establ
172.57.13.1     65501    15427   52       0       0  0d 2:26:01 Establ
172.57.13.249   65513    13449   2517     0       0  2d 3:50:21 Establ
172.57.13.250   65513    134     2515     0       0  4d 3:50:21 Establ
172.57.13.252   65513    46      142      0       0     3:50:32 Establ

"""

bgp_peers_list_raw = []
bgp_peers_list_refined = []
bgp_peers_list_raw = [l.strip() for l in bgp_summary.splitlines()
                      if l.strip()]

n = 0
for n in range(len(bgp_peers_list_raw)):
    list_raw1 = []
    list_raw1 = bgp_peers_list_raw[n].split()
    bgp_peers_list_refined.append(list_raw1[0])

bgp_peers_list_refined.append(list_raw1[0])
print(bgp_peers_list_refined)

结果:

['10.0.13.213', '172.46.42.134', '172.57.13.1', '172.57.13.249',
 '172.57.13.250', '172.57.13.252', '172.57.13.252']

这是因为bgp_summary有一些空行

最简单、最直接的解决方案是将bgp_summary转换为:

bgp_summary = """

10.0.13.213     65510    658     86       0       0  2d 3:43:06 Establ
172.46.42.134   65513    819     7        0      11  2d 3:50:49 Establ
172.57.13.1     65501    15427   52       0       0  0d 2:26:01 Establ
172.57.13.249   65513    13449   2517     0       0  2d 3:50:21 Establ
172.57.13.250   65513    134     2515     0       0  4d 3:50:21 Establ
172.57.13.252   65513    46      142      0       0     3:50:32 Establ

"""

致:

bgp_summary = """10.0.13.213     65510    658     86       0       0  2d 3:43:06 Establ
172.46.42.134   65513    819     7        0      11  2d 3:50:49 Establ
172.57.13.1     65501    15427   52       0       0  0d 2:26:01 Establ
172.57.13.249   65513    13449   2517     0       0  2d 3:50:21 Establ
172.57.13.250   65513    134     2515     0       0  4d 3:50:21 Establ
172.57.13.252   65513    46      142      0       0     3:50:32 Establ"""

虽然不是很好看,但可以解决你的问题

一个更复杂的解决方案是对for循环进行一个小的修改,使bgp_summary保持不变

不要像这样检查每一行:

range(len(bgp_peers_list_raw))

您可以在开始和结束时排除空的,如下所示:

#2 empty lines at the start
#1 empty line at the end
range(2, len(bgp_peers_list_raw)-1)

相关问题 更多 >

    热门问题