Without the finally block, do_something_finally() will not be called if:
1. the try block returns
2. the catch block doesn't handle /all/ types of exceptions
The point of finally is that it's always, always, always executed.
1. the try block returns
2. the catch block doesn't handle /all/ types of exceptions
The point of finally is that it's always, always, always executed.
Except when it's not. If you design a large system with the assumption that finally blocks always execute, you could end up with some data integrity issues when you get a power outage, an exception in your finally clause, a hung machine, or any other number of errors that a finally clause does nothing to address.
The finally clause is very useful, but to say that it will always (x3!) execute is somewhat perilous.