你应该更喜欢try/except
过if/else
如果结果
通常,这些并存。
如果尝试通过以下方式在长列表中查找元素:
try:
x = my_list[index]
except IndexError:
x = 'NO_ABC'
当index
可能在列表中并且通常不引发IndexError时,尝试除外是最好的选择。这样一来,您无需再进行额外的查找if index < len(my_list)
。
可以使用Dive Into Python中的短语来 。您的示例不仅(优美地)处理异常,而不是让其 静默通过 ,而且仅在未找到索引的 特殊 情况下才发生 异常 (因此,单词 异常 !)。
Python的官方文档提到了EAFP: 比起许可更容易获得宽恕 ,Rob Knight指出 可以使代码更 简洁,更易于阅读。他的示例如下所示:
更糟 (LBYL“跳前先看”) :
#check whether int conversion will raise an error
if not isinstance(s, str) or not s.isdigit():
return None
elif len(s) > 10: #too many digits for int conversion
return None
else:
return int(s)
更好 (EAFP:寻求宽恕比获得许可更容易) :
try:
return int(s)
except (TypeError, ValueError, OverflowError): #int conversion Failed
return None