Недавно я обучал себя Python и обнаружил идиомы LBYL / EAFP в отношении проверки ошибок перед выполнением кода. В Python, похоже, принятый стиль - EAFP, и он, кажется, хорошо работает с языком.
LBYL (L ook B до Y или L eap):
def safe_divide_1(x, y):
if y == 0:
print "Divide-by-0 attempt detected"
return None
else:
return x/y
EAFP (это E больше, чем разрешение, чем разрешение):
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. Это просто предпочтение?