Try com except e finally
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;
Exemplo:
Try
a := StrToInt(´b´);
except
Showmessage(´Número inválido´);
end;
finally
Showmessage(´Número válido´);
end;
Dallagnelo
Curtidas 0
Melhor post
Aroldo Zanela
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:
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.
GOSTEI 3
Mais Respostas
Lucas Silva
31/05/2004
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;
GOSTEI 0
Nildo
31/05/2004
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:
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!!´);
GOSTEI 0
Paulo_amorim
31/05/2004
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é+
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é+
GOSTEI 0
Beppe
31/05/2004
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.
GOSTEI 0
Beppe
31/05/2004
Eu vi q eu postei errado...a var Erros deve receber True dentro do bloco except
except Erros := [b]True[/b]; end;
GOSTEI 0
Nildo
31/05/2004
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:
Concluindo, diminuiu o código e ainda não para para debuggar se você estiver rodando seu programa pela IDE do Delphi.
Abraços
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
GOSTEI 0
Beppe
31/05/2004
Realmente não precisa, mas pra demonstrar o aninhamento de um except com finally, tem que ter um finally...
GOSTEI 0
Paulo_amorim
31/05/2004
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é+
GOSTEI 0
Nildo
31/05/2004
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;
GOSTEI 0
Nildo
31/05/2004
O segundo parametro é uma variável do tipo Inteiro que deve ser passada como parametro
GOSTEI 0
Aroldo Zanela
31/05/2004
Colega,
Como o Beppe já comentou, foi apenas para demonstrar o aninhamento e, principalmente, para funcionar em versões anteriores ao Delphi6.
Como o Beppe já comentou, foi apenas para demonstrar o aninhamento e, principalmente, para funcionar em versões anteriores ao Delphi6.
GOSTEI 1