如何在Python中忽略或传递xpath xml IndexError

时间:2012-09-21 17:06:23

标签: python xml lxml

如何在不使用IndexError的情况下强制python忽略try& except我提取的每一个值?

我的XML有多个需要提取的值。有些记录在root [0]上没有值,所以我必须手动使用try&对于我正在提取的每个节点,except IndexError:

这是我的代码:

try:
    a = etree.XPath('/Data/a/b/nodeA/text()')(root)[0]  
except IndexError:  
    a = ''
try:
    b = etree.XPath('/Data/a/b/x/y/nodeB/text()')(root)[0]  
except IndexError:  
    b = ''
try:
    c = etree.XPath('/Data/a/b/d/nodeB/text()')(root)[0]  
except IndexError:  
    c = ''

2 个答案:

答案 0 :(得分:1)

在尝试检索第一个匹配项之前测试返回值

a = etree.XPath('/Data/a/b/nodeA/text()')(root)
if a:
   # do something with a[0]

或者,将a设置为空字符串或单行上的第一个值:

a = etree.XPath('/Data/a/b/nodeA/text()')(root)
a = a[0] if a else ''

答案 1 :(得分:1)

当我使用xpath查询时,我尝试使用循环而不是索引。这样,如果查询没有找到任何内容,嵌套在循环中的代码永远不会运行而你不会 t必须索引,因为循环值在每次迭代中都绑定到本地名称。允许一个例子。

for a, b, c in zip(
    etree.XPath('/Data/a/b/nodeA/text()')
    etree.XPath('/Data/a/b/x/y/nodeB/text()')
    etree.XPath('/Data/a/b/d/nodeB/text()')):

    print a, b, c