What you're doing is basically the same as the
Error module, with the same dangers. It is easy to create closures by accident and leak tons of memory, and people may be confused by the fact that a "return" inside a dbtry only returns from the dbtry.
I think what you had in the beginning was a better idea.