2012-09-21 16 views
1

我怎麼能強迫蟒蛇忽略IndexError不使用try & except,我提取的每一個值?如何忽略或通過XPath的XML IndexError在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 = '' 

回答

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 
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 ''