1

How can I force python to ignore IndexError without using try & except every single value that I am extracting?

My XML have multiple values that needed to be extracted. Some records don't have the value / at root[0], so I have to manually use try & except IndexError: for every single node that I am extracting.

Here's my code:

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

Test for the return value before trying to retrieve the first match:

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

Alternatively, set a to an empty string or the first value on a single line:

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 に答える