最近我在自学Python时,了解到关于代码执行前的错误检查中的LBYL/EAFP习惯用法。在Python中,EAFP似乎是被认可的风格,并且它与该语言的结合效果很好。
LBYL(Look Before You Leap):
def safe_divide_1(x, y):
if y == 0:
print "Divide-by-0 attempt detected"
return None
else:
return x/y
EAFP(它的缩写来自于英语单词 Easier to Ask Forgiveness than Permission):
def safe_divide_2(x, y):
try:
return x/y
except ZeroDivisionError:
print "Divide-by-0 attempt detected"
return None
我的问题是:我从Java和C++的背景中甚至没有听说过使用EAFP作为主要数据验证结构。在Java中使用EAFP是否明智?或者异常处理会不会造成太多的开销?我知道只有在实际抛出异常时才会产生开销,所以我不确定为什么不使用更简单的EAFP方法。这只是偏好吗?