我最近在自学 Python,并发现了关于代码执行前错误检查的 LBYL/EAFP 习语。在 Python 中,似乎公认的风格是 EAFP,而且它似乎与该语言很好地配合。
LBYL (在你之前先看看):_
def safe_divide_1(x, y):
if y == 0:
print "Divide-by-0 attempt detected"
return None
else:
return x/y
EAFP ( Ask F orgiveness比Permission更容易):
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 方法。只是偏好吗?