Python列表索引超出范围 - minidom

时间:2013-03-21 17:48:36

标签: python xml linux

快速提问,当您看到错误'builtins.IndexError:list index out of range'时,正确的解决方案是什么?

这是关于我已经开始的另一个thread ,但我不想让它脱轨。

代码:

from xml.dom import minidom

net_xml = minidom.parse("network_objects.xml")

NetworkObjectsTag = net_xml.getElementsByTagName("network_objects")[0]

# Pull individual network objects
NetworkObjectTag = NetworkObjectsTag.getElementsByTagName("network_object")

for network_object in NetworkObjectTag:
    name = network_object.getElementsByTagName("Name")[0].firstChild.data
    class_name = network_object.getElementsByTagName("Class_Name")[0].firstChild.data
    color = network_object.getElementsByTagName("color")[0].firstChild.data
    ipElement = network_object.getElementsByTagName("ipaddr")
    ipaddr = ipElement.firstChild.data
    maskElement = network_object.getElementsByTagName("netmask")
    netmask = maskElement.firstChild.data
    #address_ranges
    ipaddr_first = network_object.getElementsByTagName("ipaddr_first")
    ipaddr_last = network_object.getElementsByTagName("ipaddr_last")
    print(name,class_name,ipaddr,netmask,ipaddr_first,ipaddr_last,color)

打印6行后生成的错误是:

ipElement = network_object.getElementsByTagName("ipaddr")[0]
IndexError: list index out of range

2 个答案:

答案 0 :(得分:1)

这意味着引用的列表为空。换句话说,网络对象没有ipaddr标记。

为了安全起见,您需要将getElementsByTagName的结果保存到变量并检查长度,然后再保存到ipelement当没有ipaddr时,您的操作取决于您

答案 1 :(得分:0)

Huzah,感谢freenode / #python上的cwillu_at_work。有用的建议导致:

    ipElement = network_object.getElementsByTagName("ipaddr")
if ipElement:    
    ipElement = network_object.getElementsByTagName("ipaddr")[0]
    ipaddr = ipElement.firstChild.data
maskElement = network_object.getElementsByTagName("netmask")
if maskElement:
    maskElement = network_object.getElementsByTagName("netmask")[0]
    netmask = maskElement.firstChild.data