Java finally (pun intended) gets a similar feature in Java 7 later this year: try-with-resources:
http://download.java.net/jdk7/docs/technotes/guides/language...
http://download.java.net/jdk7/docs/technotes/guides/language...
The solution to this problem that makes sense to me is either conditions and restarts a la Common Lisp, or a type system that can handle multiple return values of different types in a sane way (e.g. return either a result or an error code and then pattern match against them) so that you don't always need to throw an exception in order to deal with an error.