很多时候我都会遇到这样的情况:下面的语句可能会抛出一个我不关心的异常,在异常的情况下,它应该只返回一个空字符串:
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构造。在
尝试将各个语句抽象为一个函数,并将
try...catch
放入其中:另一种方法是使用^{} :
如果
object
(b.find(...)
)没有属性name
("contents"
)则返回getattr
("contents"
)的default
参数。在您仍然可以通过将此函数设为函数来减少重复:
^{pr2}$正如Jon Clements所指出的,}(即
^{3}$getattr
相对于try
/except
的一个好处是,如果b.find(...)
引发了{b
不是您认为的那样,很可能是真正的错误),那么仍然会抛出错误。您可以将其改编为try
/except
,使用:另一个类似于@jbaiter解决方案的方法是使用本地函数。这样就避免了传递额外的参数,从而产生稍微更具可读性的代码。在
您还可以首先避免使用异常:
相关问题 更多 >
编程相关推荐