Share via


Uma visão geral do tratamento de exceção não estruturado

No unstructured exception handling, você pode colocar uma declaração On Error no início de um bloco de código, e ela trata qualquer dos erros que ocorrem dentro desse bloco.Quando uma exceção aparece em um procedimento após a execução da declaração On Error , o programa se ramifica para o argumento de linha especificado na declaração On Error.O argumento da linha, que é o número da linha ou rótulo da linha, indica a localidade do manipulador de exceção.

Às vezes, uma chamada é feita do procedimento original para outro procedimento, e uma exceção ocorre no procedimento chamado.Em tais casos, se o procedimento chamado não trata a exceção, a exceção propaga-se de volta para o procedimento de chamada, e as ramificações de execução para o argumento da linha.

Observação:

Erros não estruturado tratamento usando On Error pode prejudicar o desempenho do aplicativo e resultar em código difícil para depurar e manter. O tratamento de erros estruturado é o método recomendado.Para obter mais informações, consulte Visão Geral sobre a Manipulação Estruturada de Exceções para o Visual Basic.

On Error GoTo Line

A instrução On Error GoTo Line pressupõe que o código de tratamento de erros começa na linha especificada no argumento line necessário.Se ocorrer um erro em tempo de execução, controlar as ramificações para o número da linha ou rótulo da linha especificada no argumento, ativando o manipulador de erro*.*. A linha especificada deve estar no mesmo procedimento que a instrução On Error GoTo Line;caso contrário, Visual Basic gera um erro do compilador.O exemplo a seguir ilustra o uso de um manipulador de erro com um rótulo de linha:

Sub TestSub
   On Error GoTo ErrorHandler
      ' Code that may or may not contain errors.
   Exit Sub

   ErrorHandler:
      ' Code that handles errors.
      Resume
End Sub

O exemplo contém um manipulador de erro chamado ErrorHandler.Se qualquer código na sub-rotina TestSub gera um erro, o Visual Basic imediatamente executa o código que segue o rótulo ErrorHandler.No final do bloco de tratamento de erros, a declaração Resume passa controle novamente para a linha do código onde o erro ocorreu primeiro.O restante da sub-rotina depois continuará executando como se o erro não tivesse ocorrido.

Observação:

Você deve colocar um Exit Sub statement immediately before the error-handling block.Caso contrário, o Visual Basic executa o código de tratamento de erros quando atingir o final do sub-rotina, causando resultados não desejados ou inesperados.

On Error Resume Next

A declaração On Error Resume Next especifica que no evento ocorreu do erro em tempo de execução, o controle passa para a declaração imediatamente seguinte a aquela na qual ocorreu o erro.Nesse ponto, a execução continua.On Error Resume Next Habilita você a colocar erro - rotinas de manipulação onde erro s ocorrerão, em vez de transferência de controle para outra localidade no procedimento.

Observação:

Se o procedimento chama um outro procedimento, o On Error Resume Next demonstrativo será inativo durante a execução do procedimento chamado. Portanto, você deve colocar uma instrução On Error Resume Next em cada procedimento chamado que precisa um.Isso é necessário porque o comportamento do Resume Next aplica-se somente ao procedimento que contém a instrução On Error Resume Next.Se um erro não identificado ocorrer em um procedimento chamado, a exceção se propaga e volta para o procedimento de chamada, e a execução continua na declaração após a chamada.Em tais casos, o erro não é tratado.

Resume também pode ser usado em si próprio, fora a declaração On Error.Quando o Resume é usado dessa forma, o Visual Basic devolve o controle para a declaração que causou o erro.Você geralmente usa o Resume após um manipulador de erro corrigir o erro.

Visual Basic also provides the Resume Next statement, which directs control to the line immediately following the line of code that caused the error.Você pode usar o Resume Next para casos em que um erro não irá fazer interromper o funcionamento de seu aplicativo.Também pode usá-lo se um erro não alterará os resultados esperados de sua sub-rotina.

Outra variação na Resume a demonstrativo é Resume Line, que é semelhante a On Error GoTo Line. Resume Line passa o controle para uma linha que você especificar na line argumento. Você pode usar Resume Line somente em um manipulador de erro.

Observação:

Ao depurar seu código, você deve desabilitar o On Error Resume Next demonstrativo.

On Error GoTo 0

A declaração On Error GoTo 0 desativa qualquer manipulador de erro no procedimento atual.Se você não incluir uma declaração On Error GoTo 0, o manipulador de erro é desativado quando o procedimento que contém o manipulador de exceções termina.

Observação:

O On Error GoTo 0 demonstrativo não é destinada a especificar a linha 0 sistema autônomo o início do código de tratamento de erros, mesmo que o procedimento contenha uma linha numerada 0.

On Error GoTo -1

A declaração On Error GoTo -1 desativa quaisquer manipuladores de exceção do procedimento atual.Se você não incluir uma declaração On Error GoTo -1, a exceção é desativada automaticamente quando o procedimento termina.

Observação:

O On Error GoTo -1 demonstrativo não é destinada a especificar a linha -1 sistema autônomo o início do código de tratamento de erros, mesmo que o procedimento contenha uma linha numerada -1.

Exemplo do manipulador exceção não estruturado

No código a seguir, o manipulador de exceção é denominado DivideByZero e trata um erro específico - a tentativa da divisão por zero.Se ocorrer um erro diferente, o Visual Basic percebe o erro em tempo de execução e para o aplicativo.

Sub ErrorTest ()
' Declare variables.
   Dim x As Integer, y As Integer, z As Integer
   ' The exception handler is named "DivideByZero".
   On Error GoTo DivideByZero
   ' The main part of the code, which might cause an error.
   x = 2
   y = 0
   z = x \ y

   ' This line disables the exception handler.
   On Error GoTo 0
      Console.WriteLine(x & "/" & y & " = " & z)

   ' Exit the subroutine before the error-handling code.
   ' Failure to do so can create unexpected results.
   Exit Sub

   ' This is the exception handler, which deals with the error.
   DivideByZero:
   ' Include a friendly message to let the user know what is happening.
   Console.WriteLine("You have attempted to divide by zero!")

   ' Provide a solution to the error.
   y = 2

   ' The Resume statement returns to the point at which
   ' the error first occurred, so the application
   ' can continue to run.
   Resume

End Sub

Consulte também

Tarefas

Como: Recuperar informações de um objeto erro

Conceitos

Objeto Err no tratamento de exceção não estruturado

Introdução ao Tratamento de Exceção

Tipos de erros

Escolhendo Quando Usar Manipulação de Exceção Estruturada e não Estruturada

Referência

Instrução EndMétodo My.Application.Exit

Mensagem de objeto (Visual Basic)

Declaração Saída (Visual Basic)

Em instrução de erro (Visual Basic)

Declaração Resume