0

快速提问,当您看到错误“builtins.IndexError:列表索引超出范围”时,正确的解决方案是什么?

这是参考我要进行的另一个线程,但我不想破坏它。

代码:

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
4

2 回答 2

1

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

为了安全起见,您需要将结果保存getElementsByTagName到变量并检查长度,然后再保存到ipelement 没有时您要做什么ipaddr由您决定。

于 2013-03-21T17:56:25.877 回答
1

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
于 2013-03-21T19:42:31.477 回答