Недавно я преподавал 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 не используется. Это просто предпочтение?
