【问题标题】:Parsing XML with BeautifulSoup and handling missing element用 BeautifulSoup 解析 XML 并处理缺失的元素
【发布时间】:2010-02-07 00:56:11
【问题描述】:

我正在使用BeautifulSoup 来解析 XML:

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 语句。 (因为如果我有这些语句,它会使已经很长的代码行加倍)。

如果没有“last_name”,有没有办法只返回“None”?

【问题讨论】:

    标签: python xml exception-handling beautifulsoup


    【解决方案1】:
    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 比其中任何一个都更具可读性。

    【讨论】:

    • 我更喜欢你的答案的 getattr 版本,因为我相信这正是 getattr 最初创建的!
    • @alex:哦,不!我的源代码文件中有很多换行符。我会怎么做?
    • @alex:也许你可能想用一个例子来解释(通过编辑你的问题)你所说的“双行”是什么意思,以及 Alex Martelli 的getattr 建议会如何发生。使用 getattr 的默认参数(或 dicts 和 Elementtree 元素的 get 方法)是避免 iftry 以足够可读的方式的常用方法。
    • @John,我认为@alex 仅指我的建议,即if 可以更具可读性!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多