["java","python","error-handling","idioms"]
LBYL vs EAFP in Java?

I was recently teaching myself Python and discovered the LBYL/EAFP idioms with regards to error checking before code execution. In Python, it seems the accepted style is EAFP, and it seems to work well with the language. 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 (it's Easier to Ask Forgiveness than Permission): def safe_divide_2(x, y): try: return x/y except ZeroDivisionError: print "Divide-by-0 attempt detected" return None My question is this: I had never even heard of using EAFP as the primary data validation construct, coming from a Java and C++ background. Is EAFP something that is wise to use in Java? Or is there too much overhead from exceptions? I know that there is only overhead when an exception is actually thrown, so I'm unsure as to why the simpler method of EAFP is not used. Is it just preference?
Personally, and I think this is backed up by convention, EAFP is never a good way to go. You can look at it as an equivalent to the following: if (o != null) o.doSomething(); else // handle as opposed to: try { o.doSomething() } catch (NullPointerException npe) { // handle } Moreover, consider the following: if (a != null) if (b != null) if (c != null) a.getB().getC().doSomething(); else // handle c null else // handle b null else // handle a null This may look a lot less elegant (and yes this is a crude example - bear with me), but it gives you much greater granularity in handling the error, as opposed to wrapping it all in a try-catch to get that NullPointerException, and then try to figure out where and why you got it. The way I see it EAFP should never be used, except for rare situations. Also, since you raised the issue: yes, the try-catch block does incur some overhead even if the exception is not thrown.