I just had a pretty painful troubleshooting experience in troubleshooting some code that looked like this:
try { doSomeStuff() doMore() } finally {
Not at all.
What's wrong is the code inside the finally.
Remember that finally will always get executed, and is just risky ( as you have just witnessed ) to put something that may throw an exception there.