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.