Try com except e finally
31/05/2004
0
Exemplo:
Try
a := StrToInt(´b´);
except
Showmessage(´Número inválido´);
end;
finally
Showmessage(´Número válido´);
end;
Dallagnelo
Post mais votado
31/05/2004
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
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;
31/05/2004
Nildo
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!!´);
31/05/2004
Paulo_amorim
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é+
31/05/2004
Beppe
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.
01/06/2004
Beppe
except Erros := [b]True[/b]; end;
01/06/2004
Nildo
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
01/06/2004
Beppe
01/06/2004
Paulo_amorim
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é+
01/06/2004
Nildo
function TryStrToInt(const S: string; out Value: Integer): Boolean; var E: Integer; begin Val(S, Value, E); Result := E = 0; end;
01/06/2004
Nildo
01/06/2004
Aroldo Zanela
Como o Beppe já comentou, foi apenas para demonstrar o aninhamento e, principalmente, para funcionar em versões anteriores ao Delphi6.
Clique aqui para fazer login e interagir na Comunidade :)