I think your finally code block is working fine. Maybe your lbl text is lost because view state isn't enabled.
I advise you shouldn't write error messages in finally block. Finally block is used for code cleanup etc.
Here you need to put your error message in catch block.
A few more things about try catch finally
Try Block: wrap the code with try block where you are doing stuff (DB retrieval, connections, calling functions etc)
Catch block: The code wrapped in these blocks will be executed when there is an exception in try block, If you want you can have multiple catch blocks each for a specific exception.
Finally: Well finally block always runs regardless of exception or successful execution of try block and this block is used for code cleanup. consider this example - you created a db connection and then try to retrieve some data, you connection is successful but there is an error in your query then there will be an exception and it will come to catch block. what you need to do is to close the connection in finally that way you will not have any open connection.
I hope it will help.