A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Tratamento de Exceções (try)

Apresentações semelhantes


Apresentação em tema: "Tratamento de Exceções (try)"— Transcrição da apresentação:

1 Tratamento de Exceções (try)
objetivo  tratar erros de software ou hardware como  separando o código de tratamento de erros do código normal da aplicação Em tempo de execução, o Delphi levanta exceções quando alguma coisa sai errada e o código da aplicação, se escrito adequadamente, poderá solucionar. Exceção é um objeto que contém informações sobre o erro ocorrido e onde ocorreu.

2 define se a execução do programa deverá parar ou não quando o Delphi levantar uma exceção

3 Todo mecanismo de tratamento de exceções é baseado em quatro
palavras-chave: try delimita o começo de um bloco de código protegido except delimita o fim de um bloco de código protegido e introduz as instruções de tratamento de exceções, com a sintaxe: on tipo-exceção1 do instrução1; on tipo-exceção2 do instrução2; ... [ else {código padrão de tratamento de erros }; ] finally é usada para especificar blocos de código limpo que devem ser executados sempre, mesmo quando ocorrerem exceções (liberar recursos) raise é a instrução usada para gerar uma exceção (pode ser usada dentro de um manipulador para relevantar uma exceção, isto é, para propagá-la para o próximo manipulador)

4 { Esta função representa um exemplo simples
de bloco de código protegido. Na instrução de manipulação de exceção, é capturada a exceção EDivByZero, que se refere a um problema de divisão por zero, detectado em tempo de execução (Run-Time Error) e que é levantada pelo Delphi. } function Divide(A, B: integer): integer; begin try { tratando erro de divisão por zero } Result := A div B; except on EDivByZero do Result := 0; end;

5 Exceções da RTL (1/4) RTL- Run-Time Library, biblioteca de run-time
As exceções geradas pela RTL são definidas em Arquivos de Programas - Borland - Delphi6 - Source - Rtl - Sys (SysUtils, SysConst), e todas descendem da classe mais geral Exception, que provê a string que aparece na janela.

6

7

8 Exceções da RTL (2/4) Exceções de Entrada e Saída
acessar arquivos ou dispositivos de entrada e saída EInOutError, o atributo ErrorCode indica o erro ocorrido Exceções de Memória Heap (EHeapException) alocar ou acessar memória dinâmica EOutofMemory, não há memória suficiente EInvalidPointer, ponteiro inválido

9 Exceções da RTL (3/4) Exceções Matemáticas para Inteiros (EIntError)
EDivByZero, divisão por zero ERangeError, número fora do limite EIntOverflow, estouro na operação com inteiro Exceções de Ponto Flutuante (EMathError) EInvalidOp, operação inválida EOverflow, estouro na operação com reais EUnderflow, estouro na operação com reais EZeroDivide, divisão por zero

10 Exceções da RTL (4/4) Exceções de TypeCast Exceções de Conversão
atribuir um objeto a um tipo incompatível usando o operador as UmObjeto as TipoObjeto, gera a exceção se UmObjeto é de um tipo incompatível com o TipoObjeto EInvalidCast Exceções de Conversão converter dados de um tipo para outro EConvertError

11 Hierarquia das Exceções
tipos de exceções: TObject EDivByZero ERangeError EIntOverflow Exception EExternal EInvalidOp EOverflow EUnderflow EZeroDivide EIntError EMathError

12 Outras Exceções Importantes
EVariantError, erro em operação com variant EAbort, exceção silenciosa, pode ser gerada pelo procedimento Abort e não mostra nenhuma mensagem EAccessViolation, acesso inválido à memória, geralmente ocorre com objetos não inicializados EDatabaseError, erro genérico de banco de dados EDBEngineError, descende de EDatabaseError e traz dados que podem identificar o erro

13 Códigos de Erro da BDE (BDE.int, pasta Doc do Delphi) DBIERR_KEYVIOL violação de chave primária DBIERR_LOCKED registro travado DBIERR_FILELOCKED arquivo travado DBIERR_LOOKUPTABLEERR erro em tabela Lookup DBIERR_DETAILTABLESEXIST 9734 há registros na tabela detalhe violando, portanto, a integridade do relacionamento

14

15 Programadores também podem definir suas próprias
exceções; simplesmente criando uma nova subclasse da classe da exceção padrão: type EArrayFull = class(Exception); Quando for acrescentado um novo elemento a um array que já está cheio (provavelmente por causa de um erro de lógica do programa), é possível lançar a exceção correspondente criando um objeto desta classe: if MyArray.Full then raise EArrayFull.Create(‘Array Full’); Este método Create (herdado da classe Exception) tem um parâmetro de string para descrever a exceção para o usuário. Nota: não é necessário destruir o objeto que criou a exceção, pois ele será excluído automaticamente pelo mecanismo de tratamento de exceções.

16 { Este trecho de programa levanta a exceção
criada por: raise EArrayFull.Create(‘Array Full’); } begin ... try { operação qualquer sobre o array que irá levantar a exceção: EArrayFull } except on EArrayFull do { trata a exceção de array cheio }; end;

17 Objeto de Exceção try ... except
{ O objeto E da Classe Exception recebe o valor do objeto exceção levantado (generalizar a exceção). } on E: Exception do begin Result := 0; MessageDll(E.Message, mtError, [mbOK], 0); end; Nota: quando o Delphi levanta uma exceção um objeto exceção é criado indicando seu tipo para tratamento através da cláusula on.

18 Protegendo o código e tratando a exceção levantada Código desprotegido, descrição da exceção levantada é apresentada ao usuário Código desprotegido, sendo que a exceção levantada e apresentada ao usuário, foi criada com a instrução raise

19 Referência Dominando o Delphi 4 - A Bíblia Marco Cantú
MAKRON Books, 1999 Capítulo 3- Programação Orientada a Objetos em Delphi pg


Carregar ppt "Tratamento de Exceções (try)"

Apresentações semelhantes


Anúncios Google