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的更简单方法。只是偏好吗?