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
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)