Try com except e finally

31/05/2004

0

Alguém sabe se posso utilizar num try o except e o finally?
Exemplo:

Try
a := StrToInt(´b´);
except
Showmessage(´Número inválido´);
end;
finally
Showmessage(´Número válido´);
end;


Dallagnelo

Dallagnelo

Responder

Post mais votado

31/05/2004

Colega,

Como já foi demonstrado o Delphi não suporta construções do tipo try ... catch ... finally como em Java e C#, devendo portanto, fazer aninhamento com try ... finally e try ... except, tomando os devidos cuidados.

Exemplo:

var Erro: Boolean;
    a: Integer;
    b: String;
begin

b := ´b´;

try
  try
    a := StrToInt(b);
      Erro := false;
  except
    Erro := true;
  end; // try ... except
finally
    if Erro then
      Showmessage(´Número inválido´) // houve um erro!
    else
      Showmessage(´Número válido´); // se isto executar, é pq nenhum erro ocorreu ainda
    end;
end; // try ... finally
end.



Aroldo Zanela

Aroldo Zanela
Responder

Mais Posts

31/05/2004

Lucas Silva

Try // para o finally
Try  // para o except
a := StrToInt(´b´); 
except 
Showmessage(´Número inválido´); 
end; 
finally 
Showmessage(´Número válido´); 
end;



Responder

31/05/2004

Nildo

Neste caso você não pode colocar um FInally.

O Finally vai ser executado SEMPRE, independente se Der ou Não der erro. Então você deve fazer assim:

Try  // para o except 
   a := StrToInt(´b´); 
except 
   Showmessage(´Número inválido´); 
   Exit; // Se der erro vai sair
end; 

Showmessage(´Número válido!!´);



Responder

31/05/2004

Paulo_amorim

Olá

Não se deve colocar finally para validações, visto que se for assim, no teu exemplo o numero seria SEMPRE VÁLIDO (o que é absurdo).

Use try...finally somente se tiver algo que DEVE ser executado independente do que acontecer...por exemplo fechar algo que está aberto e necessita de fechamento para a continuidade do programa, por exemplo...

Até+


Responder

31/05/2004

Beppe

Alguém sabe se posso utilizar num try o except e o finally? Exemplo: Try a := StrToInt(´b´); except Showmessage(´Número inválido´); end; finally Showmessage(´Número válido´); end;

Como o Lucas mostrou, vc terá que aninhar um dentro do outro, o Delphi não permite essa mesclagem, o que acho que seria útil para economia de digitação.

E como o Paulo disse, vc naum usa uma cláusula finally para validação. Finally serve para envolver um bloco de código que deve ser executado, mesmo em caso de erro.

Pode fazer assim:
Try
  a := StrToInt(´b´);
  Showmessage(´Número válido´); // se isto executar, é pq nenhum erro ocorreu ainda
except
  Showmessage(´Número inválido´); // houve um erro!
end;


ou assim:
erros := False;
Try
  a := StrToInt(´b´);
except
  Erros := False;
end;
if Erros then
  Showmessage(´Número inválido´); // houve um erro!
else
  Showmessage(´Número válido´); // se isto executar, é pq nenhum erro ocorreu ainda

Vc tb poderia ter usado a função Val, q naum gera uma exceção, vas indica erros via um parâmetro out.


Responder

01/06/2004

Beppe

Eu vi q eu postei errado...a var Erros deve receber True dentro do bloco except

except 
  Erros := [b]True[/b]; 
end; 



Responder

01/06/2004

Nildo

Aroldo, o porque do Finally do seu exemplo? Não precisa, já que SE cair no Except ele não vai parar a execução do bloco (depois do except).

Se for para testar se um String pode ser um Inteiro válido você pode usar a função TryStrToInt.

Exemplo:

   if TryStrToInt( VariavelString ) then
      ShowMessage( ´Validado´ )
   else
      ShowMessage( ´Não validado´ );


Concluindo, diminuiu o código e ainda não para para debuggar se você estiver rodando seu programa pela IDE do Delphi.

Abraços


Responder

01/06/2004

Beppe

Realmente não precisa, mas pra demonstrar o aninhamento de um except com finally, tem que ter um finally...


Responder

01/06/2004

Paulo_amorim

Se for para testar se um String pode ser um Inteiro válido você pode usar a função TryStrToInt.


Olá

Esse comando nao existe no D5... deve ter sido incluído a partir do D6 ou 7 (dããã pra mim... claro que foi depois então né :? )

Ou tem que por alguma coisa extra pra ele funcionar?
Nem no Help eu achei


Até+


Responder

01/06/2004

Nildo

Tem no SysUtils do D6

function TryStrToInt(const S: string; out Value: Integer): Boolean;
var
  E: Integer;
begin
  Val(S, Value, E);
  Result := E = 0;
end;



Responder

01/06/2004

Nildo

O segundo parametro é uma variável do tipo Inteiro que deve ser passada como parametro


Responder

01/06/2004

Aroldo Zanela

Colega,

Como o Beppe já comentou, foi apenas para demonstrar o aninhamento e, principalmente, para funcionar em versões anteriores ao Delphi6.


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar