IndexError:列表索引超出范围 - python for循环

时间:2017-11-28 14:52:32

标签: python python-2.7

我正在努力解决这个错误,我真的不明白,因为我是一名技术娴熟的网络工程师。
我正在路由器的列表中读取show命令行 - 这一切都正常 从该列表中我想解析出某些值,我正在用for循环执行该操作 我在结束时得到了我需要的结果,但也是一个错误 我只想要列表中的某些值,即" 3rd"仅限IP地址,无端口号等(即' 2.122.62.193',' 31.49.158.183')

out1 = ['tcp 217.33.162.162:443    172.16.0.1:443        2.122.62.193:49971    
2.122.62.193:49971', 'tcp 217.33.162.162:443    172.16.0.1:443        
31.49.158.183:49266   31.49.158.183:49266', '']
gnat = []

for x in out1:
   y = x
   z = y.split(':')[3]
   w = z.split()[1]
   gnat.append(w)

>>> for x in out1:
...    y = x
...    z = y.split(':')[3]
...    w = z.split()[1]
...    gnat.append(w)
...
Traceback (most recent call last):
  File "<console>", line 3, in <module>
IndexError: list index out of range
>>> print gnat
['2.122.62.193', '31.49.158.183'

它可能不是最有效的代码,但这是正确的结果 只有我不理解这个错误?

1 个答案:

答案 0 :(得分:0)

查看列表值,您可能会发现错误位于''.split(':')[3]。你在那里分裂什么?

试试这个逻辑

  1. 如果是空字符串,则不执行任何操作
  2. 拆分空格
  3. 抓住IP:端口
  4. 拆分端口
  5. 像这样的东西

    for x in out1:
        if x.strip() == '':
            continue
       ip_port = x.split()[3]
       ip = ip_port.split(':')[0]
       gnat.append(ip)