快速提问,当您看到错误'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
答案 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