At what point during development do you typically implement your exception handlers? Do you write them at the same time as you write the surrounding code, or do you write your code and then come back to “harden” it later?
I typically do the latter so that I can see exactly where and how my code fails, but I worry that my code isn’t as resilient as it could be if I would have written the exception handlers right away.
At the same time, I don’t want to spend a whole bunch of development time figuring out all the possible ways that my code could fail when there are other implementation details that I haven’t settled on yet.
I’m curious as to how other developers do this.
Update: I just wanted to thank everyone for their answers!
I either write the exception handlers immediately, or I allow the exceptions to propagate upwards. I’m a big fan of what I call the “You’re Not Going To Go Back And Fix It Later, Are You?” principle. You say you will, but honestly, once you get it working, you’re not going to go back and fix it later, are you? Just get it right right now! Write your exception handlers right away, or add a
throwsclause and make it somebody else’s problem. Do the right thing right now.But you know what, sometimes you can’t. Whatever you do, do not swallow exceptions with empty exception handlers! This is evil:
I drop kick anybody on my team who checks that in.
If you really don’t know what to do about an exception and cannot add a
throwsclause to propagate it upwards, at least do something halfway responsible. Print a stack trace, if nothing else. It’s not ideal but at least you’re not hiding errors.Logging it via your application’s logging system is better, though you shouldn’t make a habit of it. It’s supposed to be the caller’s responsibility to handle these kinds of things.
As a last resort, you can do an end run around your
throwsclause by wrapping your exception in aRuntimeException. At least you’re giving somebody higher up the call chain a chance to handle the error, which is normally the Right Thing To Do.