错误时返回语句序列的空字符串

2024-06-28 15:19:35 发布

您现在位置:Python中文网/ 问答频道 /正文

很多时候我都会遇到这样的情况:下面的语句可能会抛出一个我不关心的异常,在异常的情况下,它应该只返回一个空字符串:

name="".join(b.find(itemprop='name').contents)
phone= "".join(b.find(itemprop='telephone').contents)
fax="".join(b.find(itemprop='faxNumber').contents)

如果第一条语句导致异常,则会停止整个执行,而不是运行所有语句,例如:

^{pr2}$

因此,如果不对这么长的语句列表使用try-catch-finally,我如何确保我只强制运行上述所有语句?有许多连续语句要运行,因此不想使用try-catch构造。在


Tags: 字符串namecontents情况phone语句findtelephone
3条回答

尝试将各个语句抽象为一个函数,并将try...catch放入其中:

def find_field(name, b):
    try:
        return "".join(b.find(itemprop=name).contents)
    except AttributeError:
        return ""

name = find_field('name', b)
phone = find_field('phone', b)
fax = find_field('fax', b)

另一种方法是使用^{}

name = "".join(getattr(b.find(itemprop="name"), "contents", ""))

如果objectb.find(...))没有属性name"contents")则返回getattr"contents")的default参数。在

您仍然可以通过将此函数设为函数来减少重复:

^{pr2}$

正如Jon Clements所指出的,getattr相对于try/except的一个好处是,如果b.find(...)引发了{}(即b不是您认为的那样,很可能是真正的错误),那么仍然会抛出错误。您可以将其改编为try/except,使用:

^{3}$

另一个类似于@jbaiter解决方案的方法是使用本地函数。这样就避免了传递额外的参数,从而产生稍微更具可读性的代码。在

您还可以首先避免使用异常:

def find_field(name):
    x= b.find(itemprop=name)
    return "".join(x.contents) if hasattr(x,'contents') else ""

name, phone, fax = map(find_field, ['name','phone','fax'])

相关问题 更多 >