This is because you issue a return statement before the exception is passed trough and thus a valid value is returned. You cannot both return a value and throw an exception.
Removing the finally block around the return will give the behaviour you want.