Ir para o conteúdo
Hercles

Qual a finalidade de Try e Except ?

Mensagens Recomendadas

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.

Editado por thoga31

Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 ;

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 '.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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;

Editado por pwseo
syntax highlight.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.