2013-03-21 4 views
0

빠른 질문, 'builtins.IndexError :리스트 인덱스가 범위를 벗어났습니다.'라는 오류가 나타나면 올바른 해결책은 무엇입니까?파이썬리스트 인덱스가 범위를 벗어났습니다 - minidom

다른 참조 번호 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

즉, 'ipaddr' 요소가 없음을 의미합니다. 니가이 미니멈 물건에 대해 오히려 완고 하잖아, 그렇지? :-P –

+0

나는 대안을 사용하는 것을 좋아한다. 그러나 이것은 그냥 단순하고/똑바로 앞으로 내 엉덩이를 뺀 것 같다 ... 이미 내가 가진 것에 예외를 추가 할 수있는 방법이 있는가? 내가 아는 한 ipaddr은 모든 섹션에 있지만 분명히 틀릴 수도 있습니다. – Numpty

답변

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 
1

이 참조 된 목록이 비어 있음을 의미한다. 즉, 네트워크 객체에는 ipaddr 태그가 없습니다.

안전을 위해 getElementsByTagName의 결과를 변수에 저장하고 길이를 확인한 후 ipelement에 저장해야합니다. ipaddr이없는 경우 어떻게해야합니까?

+0

Martijn이 잘 알고 있기 때문에 제 파이썬은 끔찍합니다. 어떻게 제대로 보여 주시겠습니까? :) – Numpty

+0

또는 설명서에 대한 올바른 방향으로 나를 가리켜 주시면 감사하겠습니다. – Numpty

관련 문제