你应该更喜欢
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)