LBYL vs EAFP in Java?
我最近在自学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(它比Permission更像Ask Forgiveness):
def safe_divide_2(x, y):
try:
return x/y
except ZeroDivisionError:
print "Divide-by-0 attempt detected"
return None
我的问题是这样的:我甚至从未听说过使用EAFP作为主要的数据验证结构,来自Java和C++背景。EAFP在Java中使用是明智的吗?还是异常带来的开销太大?我知道当实际抛出异常时只有开销,所以我不确定为什么不使用EAFP的更简单方法。只是偏好吗?