我有一些代码从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))
虽然我接受它首先抱怨计数行,因为count是单位部分中xml文件中三个中最高的,但我仍然不确定它为什么抱怨,因为它成功地运行了一组非常相似的从中克隆和编辑的代码。
任何人都知道我能做什么或者可以建议改进问题的方法吗?
答案 0 :(得分:2)
一个简单的想法:检查evoNode.getElementsByTagName("count")
是否返回非空列表:
counts = evoNode.getElementsByTagName("count")
if counts:
unitCount = getText(counts[0].childNodes)
当然,检查应该应用于您的代码检索到的所有列表。
另外一件事,你使用 unitNode
进行迭代,但在循环内部,您可以访问 evoNode
,这可能与每个人相同迭代。
答案 1 :(得分:1)
正如gimel所说,如果它返回非空列表,你应该检查getElementsByTagName(“count”),但是回到你的问题:
如果你之前说过它正常工作,那么我猜测问题出在你获取XML的源头。