1

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

我的 XML 有多个需要提取的值。有些记录在根 [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 = ''
4

2 回答 2

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 ''
于 2012-09-21T17:07:56.077 回答
1

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

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
于 2012-09-21T17:44:35.177 回答