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 文件中三个中最高的,但我仍然不确定它为什么抱怨,因为它成功地运行了一组非常相似的代码被克隆和编辑。

任何人都知道我可以做什么或可以提出改进问题的方法吗?

4

2 回答 2

2

一个简单的想法:检查是否evoNode.getElementsByTagName("count")返回一个非空列表:

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

当然,检查应该应用于您的代码检索到的所有列表。

另一件事,您使用 进行迭代unitNode,但在循环内部,您访问evoNode,这对于每次迭代可能都是相同的。

于 2009-01-14T17:08:01.977 回答
1

正如 gimel 所说,如果它返回非空列表,您应该检查 getElementsByTagName("count") ,但回到您的问题:

如果您说它之前可以正常工作,那么我猜问题出在您获取 XML 的源代码上。

于 2009-01-14T17:14:38.170 回答