2010-02-07 70 views
0

我使用BeautifulSoup解析XML:解析XML與BeautifulSoup和處理丟失的元素

xml = """<person> 
<first_name>Matt</first_name> 
</person>""" 

soup = BeautifulStoneSoup(xml) 
first_name = soup.find('first_name').string 
last_name = soup.find('last_name').string 

但我有一個問題,當沒有姓氏,因爲它扼流圈。有時飼料有它,有時它沒有。我如何防止它窒息?

我不想使用try/except語句。我也不想使用if/else語句。 (因爲如果我有這些語句,它會使已經非常長的代碼的行數翻倍)。

有什麼辦法,只是返回「無」,如果沒有「姓氏」?

回答

4
last_name = soup.find('last_name') and soup.find('last_name').string 

非常愚蠢的,但它確實符合你同樣愚蠢的限制(沒有if)。少了幾分傻:

last_name_node = soup.find('last_name') 
last_name = last_name_node and last_name_node.string 

和:

last_name = getattr(soup.find('last_name'), 'string', None) 

這兩個不具有相同的開銷爲第一。不過,我認爲一個簡單的if比任何這些都更可讀。

+0

我喜歡你的答案的GETATTR版本,因爲我相信這正是GETATTR被擺在首位創建! –

+0

可讀,但會雙倍行:)再次感謝alex :) – TIMEX

+0

@alex:哦,不!我的源代碼文件中有很多換行字符。無論我會做什麼? – 2010-02-07 01:21:20