2016-01-11 1 views
-1

Я использую ixml для анализа XML-doxument.Как решить проблему StopIteration, в то время как тег XML не имеет значения, используя скрипт Python

from lxml import etree 
root=etree.XML(full xml tag file content) 
if (next(root.iterfind(".//one_inner_tag")).text is None): 
     Print "NONE VALUE" 
else: 
     Print root.iterfind(".//one_inner_tag")).text 

При выполнении этого кода, я столкнулся ошибку как

if (next(root.iterfind(".//one_inner_tag")).text is None): 
StopIteration 

Из содержимого файла не имеет такой специфический признак. Если тег не имеет значения, значит, мне нужно напечатать NONE VALUE. Но он печатает ошибку.

+0

Вы можете проверить длину из итерации вернулась из iterfind, вместо вызова следующего и comapring в None – M4rtini

+0

Это код расточительный - вы делаете 'iterfind' дважды: один раз, чтобы определить, существует ли элемент, а затем еще раз, чтобы извлечь текст. –

+1

@CorleyBrigman: Это действительно сломан, а не просто расточительно. Никакой итерации не было сделано во втором использовании, поэтому он пытается получить '.text' на самом генераторе, что не сработает. Кроме того, у него есть неправильная капитализация печати (и если это Py3 или Py2 с импортом '__future__'' print_function', ему нужны parens вокруг аргументов для 'print' для загрузки). – ShadowRanger

ответ

2

next может принимать второй аргумент, который возвращается на исчерпании итератора, поэтому попробуйте:

elem = next(root.iterfind(".//one_inner_tag"), None) # Returns None on empty iterator 
if elem is None or elem.text is None: 
    print "NONE VALUE" 
else: 
    print elem.text 
Смежные вопросы