更好地“尝试”某些东西并捕获异常,或者测试是否有可能首先避免异常?

更好地“尝试”某些东西并捕获异常,或者测试是否有可能首先避免异常?,第1张

更好地“尝试”某些东西并捕获异常,或者测试是否有可能首先避免异常?

你应该更喜欢

try/except
if/else
如果结果

  • 加快速度(例如,通过防止额外的查询)
  • 更清晰的代码(行数更少/更易于阅读)

通常,这些并存。


加速

如果尝试通过以下方式在长列表中查找元素:

try:    x = my_list[index]except IndexError:    x = 'NO_ABC'

index
可能在列表中并且通常不引发IndexError时,尝试除外是最好的选择。这样一来,您无需再进行额外的查找
if index <len(my_list)

Python鼓励使用异常, 可以使用Dive Into
Python中
的短语来 处理 异常 。您的示例不仅(优美地)处理异常,而不是让其 静默通过
,而且仅在未找到索引的 特殊 情况下才发生 异常 (因此,单词 异常 !)。


清洁代码

Python的官方文档提到了EAFP: 比起许可更容易获得宽恕 ,Rob
Knight指出 捕获错误而不是避免错误 可以使代码
简洁,更易于阅读。他的示例如下所示:

更糟 (LBYL“跳前先看”)

#check whether int conversion will raise an errorif not isinstance(s, str) or not s.isdigit():    return Noneelif len(s) > 10:    #too many digits for int conversion    return Noneelse:    return int(s)

更好 (EAFP:寻求宽恕比获得许可更容易)

try:    return int(s)except (TypeError, ValueError, OverflowError): #int conversion failed    return None


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5645746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存