Недавно я преподавал Python и обнаружил идиомы LBYL/EAFP в отношении проверки ошибок перед выполнением кода. В Python кажется, что принятый стиль - это EAFP, и, похоже, он хорошо работает с языком.
LBYL ( L ook B выше Y ou 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) A sk F, чем P ermission):
def safe_divide_2(x, y):
try:
return x/y
except ZeroDivisionError:
print "Divide-by-0 attempt detected"
return None
Мой вопрос таков: я даже не слышал об использовании EAFP в качестве основной конструкции проверки данных, исходящей из фона Java и С++. Является ли EAFP чем-то разумным для использования на Java? Или слишком много накладных расходов из-за исключений? Я знаю, что на самом деле есть только накладные расходы, когда исключение действительно бросается, поэтому я не уверен, почему более простой метод EAFP не используется. Это просто предпочтение?