Jump to content
Hercles

Qual a finalidade de Try e Except ?

Recommended Posts

Hercles

Alguém poderia definir qual a finalidade de TRY e EXCEPT e se possível fazer um exemplo?

Share this post


Link to post
Share on other sites
thoga31

Já leste acerca do assunto? Uma pesquisa simples devolve imensos tutoriais muito aceitáveis acerca disto.

Existem duas estruturas de tentativa que são o try-except e o try-finally. O objectivo destas estruturas é visível pelo nome: tentar fazer alguma coisa, e caso não resulte fazer outra acção.

Porquê except? Porque a um erro de execução denomina-se excepção. Portanto, quando existe, por exemplo, uma divisão por zero, ocorre uma excepção com a mensagem Division by zero. O bloco except só é executado caso ocorra uma excepção.

Por outro lado, o bloco finally é sempre executado, quer haja excepção quer não haja. Caso ocorra uma excepção, o programa salta para o finally. Caso não haja, todo o código é executado e de seguida também executa o finally.

Exemplo onde uso as estruturas encadeadas:

try
  try
     write('Num? ');
     readln(num);
     write(5/num:0:3);
     writeln(' <- resultado');
  except
     writeln('Ocorreu uma excepcao');
  end;
finally
  writeln('Fim dos blocos try.');
end;

I/O:

Num? 10
0.500 <- resultado
Fim dos blocos try.

Num? 0
Ocorreu uma excepcao.
Fim dos blocos try.

Podemos apanhar a excepção e tratá-la:

try
  try
     write('Num? ');
     readln(num);
     write(5/num:0:3);
     writeln(' <- resultado');
  except
     on ex:exception do
        writeln('Ocorreu uma excepcao: ', ex.message);
  end;
finally
  writeln('Fim dos blocos try.');
end;

I/O:

Num? 0
Ocorreu uma excepcao: Division by zero.
Fim dos blocos try.

Agora que já te introduzi ao assunto, pesquisa acerca de excepções e seu tratamento.

Edited by thoga31

Knowledge is free!

Share this post


Link to post
Share on other sites
Hercles

minha duvida começou quando eu fui entender este código.

procedure TRSAcript .MDCButtonclick ( Sender : TObject ) ;
var
x , y : Integer ;
begin
Try
x := St rToInt ( Edi t1 . capt ion ) ;
y := St rToInt ( Edi t2 . capt ion ) ;
Except
On EConvertError do
begin
Form1 . show;
e x i t ;
end ;
end ;
i f ( ( x > 0) and ( y > 0) ) then
gcdLabel . capt ion := (’MDC(’ + IntToSt r ( x ) + ’, ’ + IntToSt r ( y ) + ’) = ’ +
IntToSt r (MDC( x , y ) ) )

else

showmessage (’Os valores de entrada devem ser positivos.’) ;

end ;

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
thoga31

A tua dúvida está aqui, imagino: On EConvertError do.

É uma forma de tratar as excepções. Em vez de receberes numa variável a excepção ocorrida, fazes um tratamento diferenciado para cada classe de excepção. Neste caso, quando uma converão é impossível, ocorre uma excepção da classe EConvertError.


Knowledge is free!

Share this post


Link to post
Share on other sites
Hercles

Este "EConvertError", é uma mensagem padrão que é informado pelo programa?

Eu sei que no final é informado em caso de um numero ser negativo a mensagem " showmessage (’Os valores de entrada devem ser positivos.) ;"

Tive uma explicação na faculdade sobre o caso de ser uma letra o programa não aceitar seria o caso?

Share this post


Link to post
Share on other sites
thoga31

Um input inválido não gera uma excepção da classe EConvertError.

Como este nome indica, é uma excepção que ocorre nas conversões.

EConvertError não é uma mensagem, é uma classe de excepção. Cada classe de excepção pode ocorrer por diversos motivos, e esse motivo é indicado numa mensagem.


Knowledge is free!

Share this post


Link to post
Share on other sites
Hercles

Como eu faria se fosse digitado uma letra.... Eu quero que abra uma mensagem que informe: 'Neste campo só é permitido números positivos você digitou uma string' e no caso de digitar um numero negativo informar: ''Neste campo só é permitido números positivos você digitou um numero menor que zero '.

Share this post


Link to post
Share on other sites
thoga31

Podes lidar com esses casos sem recorrer a uma estrutura de tentativa.

Estas estruturas não devem ser massivamente utilizadas pois baixam, em geral, a eficiência do programa.


Knowledge is free!

Share this post


Link to post
Share on other sites
armizimm

Usa o evento onkeypress do TEdit, ficaria assim:

procedure TEdit.keypress;
Const Numeros = ['0','1','2','3','4','5','6','7','8','9','.'];
begin
   If Not (Key in Numeros) Then Begin
      Key := #0; //  Anula o caracter digitado.
      ShowMessage(' Este campo aceita apenas números positivos');
   end;
end;

Edited by pwseo
syntax highlight.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.