2009-01-14 86 views
1

我有一些代碼從xml文件中繪製數據,但它似乎有隨機開始投擲;蟒蛇,索引錯誤

Traceback (most recent call last): 
    File "C:\Users\mike\Documents\python\arl xml\turn 24 reader", line 52, in <module> 
    unitCount = getText(evoNode.getElementsByTagName("count")[0].childNodes) 
IndexError: list index out of range 

它以精爲先幾次我跑了以後,我不知道如果我改變了它還是不是偶然的,但現在它拋出的錯誤。

這是它嘗試使用的xml部分的示例;

- <unit> 
    <count>1200</count> 
    <type>Zweihander Doppelsoldners</type> 
    <typeid>102</typeid> 
    </unit> 

這裏是代碼,它是抱怨;

for unitNode in node.getElementsByTagName('unit'): 
     unitName  = getText(evoNode.getElementsByTagName("type")[0].childNodes) 
     unitId  = getText(evoNode.getElementsByTagName("typeid")[0].childNodes) 
     unitCount = getText(evoNode.getElementsByTagName("count")[0].childNodes) 

     unitList.append("%s x %s" % (unitName, unitCount)) 

雖然我接受它抱怨計數行頭,因爲數是最高的三個在單位部分的XML文件的我仍然不知道爲什麼它的抱怨,因爲它成功地運行從中克隆和編輯的代碼非常相似。

任何人都知道我可以做什麼或可以建議改進問題的方法?

回答

2

一個簡單的想法:檢查是否evoNode.getElementsByTagName("count")返回一個非空列表:

counts = evoNode.getElementsByTagName("count") 
if counts: 
    unitCount = getText(counts[0].childNodes) 

當然,檢查應適用於您的代碼檢索到的所有名單。

一件事,你重複使用unitNode,但在循環內,您可以訪問evoNode,這可能是每一個迭代相同。

+0

:o,woops,我錯過了當我複製它時我在每個人身上使用了evoNode,我想我對編輯有點鬆懈,謝謝你:D – user33061 2009-01-14 17:21:45

1

正如吉梅爾說,你應該檢查的getElementsByTagName(「計數」),如果返回非空列表,但回到你的問題:

如果你說這是後來我猜測,這個問題是與之前的工作來源你得到的XML。