Python, ошибки индекса

У меня есть некоторый код, который рисует данные из 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 что, вероятно, одинаково для каждой итерации.

Как сказал Гимел, вы должны проверить getElementsByTagName("count"), если он возвращает непустой список, но возвращает к вашей проблеме:

Если вы сказали, что это работало раньше, то я думаю, что проблема в источнике, где вы получаете XML.

Другие вопросы по тегам