Jump to content

Qual a finalidade de Try e Except ?


Hercles

Recommended Posts

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!

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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.
Link to comment
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.