Estruturas de TRY aninhados

Outra boa prática no momento de codificar é quando o programador precisa garantir que a memória seja liberada corretamente, conforme o esperado, mas que também possa criar um bloco de tratamento de exceções em situações já previstas, para isso usa-se uma estrutura de TRY aninhado, ou seja são estruturas incluídas uma dentro de outra.

Basicamente as estruturas TRY possuem o objetivo de tentar fazer alguma coisa, e caso não resulte fazer outra ação. Exemplo é um erro de divisão por zero, onde ocorre uma exceção com a mensagem Division by zero. O bloco except só é executado caso ocorra uma exceção.

Por outro lado, o bloco finally é sempre executado, existindo uma exceção ou não. Caso ocorra uma exceção, o programa salta para o finally. Caso não ocorra, todo o código será executado e em seguida também irá executar o finally.

Exemplo onde uso as estruturas encadeadas:

uses Classes; var vVlrEntrada: Real; vVlrResultado: Real; vMsg: String; begin vMsg:= ''; try try vVlrEntrada:= 5; vMsg:= 'Valor digitado: ' + FloatToStr(vVlrEntrada); vVlrResultado:= vVlrEntrada div 0; vMsg := vMsg + #13#10 + 'Resultado: ' + FloatToStr(vVlrResultado); except vMsg := vMsg + #13#10 + 'Ocorreu uma exceção'; end; vMsg := vMsg + #13#10 + 'Restante do código ///'; finally ShowMessage(vMsg + #13#10 + 'Fim dos blocos try.'); end; end;

 

Veja o resultado da mensagem no final:

Valor digitado: 5 Ocorreu uma exceção Restante do código /// Fim dos blocos try.