2010-02-07 27 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