Partilhar via


Instrução Try...Catch...Finally (Visual Basic)

Fornece uma maneira de lidar com alguns ou todos os possíveis erros que podem ocorrer em um determinado bloco de código, executando ainda o código.

Try
    [ tryStatements ]
    [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
    [ catchStatements ]
    [ Exit Try ] ]
[ Catch ... ]
[ Finally
    [ finallyStatements ] ]
End Try

Parts

Term

Definition

tryStatements

Optional. Comando (s) onde um erro pode ocorrer. Pode ser uma declaração composta.

Catch

Optional. Vários Catch blocos permitidos. Se uma exceção ocorre quando o processamento de Try Bloquear cada Catch demonstrativo é examinada em textual ordem para determinar se ele lida com a exceção, com exception que representa a exceção foi acionada.

exception

Optional. Qualquer nome de variável. O valor inicial do exception é o valor do errogerada. Usado com Catch especificar o erro pego. Se omitido, o Catchdedemonstrativo captura qualquer exceção.

type

Optional. Especifica o tipo de filtro de classe . Se o valor de exception é do tipo especificado por type ou de um tipo derivado, o identificador fica limite aoobjetode exceção.

When

Optional. A Catchdedemonstrativo com um When cláusula captura exceções somente quando expression for avaliada como True. A When cláusula é aplicada somente depois de verificar o tipo de exceção, e expression podem consultar o identificador que representa a exceção.

expression

Optional. Deve ser implicitamente conversível em Boolean. Qualquer expressão que descreva um filtro genérico. Normalmente usado para filtrar por número de erro . Usado com When palavra-chave para especificar as circunstâncias sob as quais o erro é detectado.

catchStatements

Optional. Instruções para manipular erros que ocorrem a associada Try bloco. Pode ser uma declaração composta.

Exit Try

Optional. Palavra-chave que se liberta da Try...Catch...Finally estrutura. A execução reinicia com o código imediatamente após a End Trydedemonstrativo. O Finallydedemonstrativo ainda serão executadas. Não é permitido em Finally blocos.

Finally

Optional. A Finally bloco sempre será executado quando sai de execução de qualquer parte do Try demonstrativo.

finallyStatements

Optional. Instruções que são executadas após o outro processamento de erro ocorreu.

End Try

Encerra o Try...Catch...Finally estrutura.

Comentários

Se você prevê que uma determinada exceção pode ocorrer durante uma seção específica do código, coloque o código em um Try Bloquear e usar um Catch bloco para manter o controle e tratar a exceção se ele ocorrer. Você pode usar quantas diferentes Catch bloqueia conforme necessário, dentro de um Try estrutura.

Variáveis locais de um Try bloco não estão disponíveis em um Catch Bloquear porque eles são blocos separados. Se você quiser usar uma variável em mais de um bloco, declarar a variável fora do Try...Catch...Finally estrutura.

O Try bloco contém código onde um erro pode ocorrer e o Catch bloco contém código para manipular qualquer erro que ocorrem. Se ocorrer um erro no Try Bloco de controle de programa é passado para o apropriado Catchdedemonstrativo para descarte. O exception argumento é uma instância da Exception classe ou uma classe que deriva do Exception classe. O Exceptioninstância declasse corresponde ao erro que ocorreu na Try bloco. A instância contém informações sobre o erro. Isso inclui, entre outras coisas, seu número e a mensagem.

Se um Catchdemonstrativo não especifica um exceptionargumento, ele o alcança qualquer tipo deexceçãode sistema ou aplicativo. Além disso, você deve sempre usar esta variação como a última Catch bloco na Try...Catch...Finally estrutura, depois de capturar todas as exceções específicas você previr. O fluxo de controle nunca pode alcançar um Catch bloco segue um Catch sem um exception argumento.

If you have one or more statements that must run before you exit the Try structure, use a Finally block. Control passes to the Finally block just before it passes out of the Try structure. This is true even if an exception occurs anywhere inside the Try structure.

Control does not pass from a Try or Catch block to the corresponding Finally block in the following cases:

No parcial-confiar situações, como um aplicativo hospedado em um compartilhamento de rede , Try...Catch...Finally não capturar exceções de segurança que ocorrem antes que o método que contém a chamada é invocado. O exemplo a seguir, quando você colocá-lo em um compartilhamento de servidor e executa a partir daí, produz o erro "System.Security.SecurityException: Falha na solicitação." Para obter mais informações sobre exceções de segurança , consulte o SecurityException classe.

Private Sub Button1_Click(ByVal sender As System.Object, 
    ByVal e As System.EventArgs) Handles Button1.Click

    Try
        Process.Start("https://www.microsoft.com")
    Catch ex As Exception
        MsgBox("Can't load Web page" & vbCrLf & ex.Message)
    End Try
End Sub

Em tal um parcial-situação de confiança, você precisa colocar a Process.Startademonstrativo em um separado Sub. A chamada inicial para o Sub irá falhar. Isso permite que Try...Catch para alcançá-la antes de Sub que contém Process.Start é iniciado e aexceção de segurançaproduzidas.

ObservaçãoObservação

Se um Try demonstrativo não contém pelo menos um Catch bloco, ele deve conter um Finally bloco.

Exemplo

O exemplo a seguir simplificado ilustra a estrutura do Try...Catch...Finally demonstrativo.

Public Sub TryExample()
    Dim x As Integer = 5   ' Declare variables.
    Dim y As Integer = 0
    Try                    ' Set up structured error handling.
        x = x \ y          ' Cause a "Divide by Zero" error.
    Catch ex As Exception When y = 0        ' Catch the error.
        Beep()
        MsgBox("You tried to divide by 0.") ' Show an explanatory message.
    Finally
        Beep()             ' This line is executed no matter what.
    End Try
End Sub

Consulte também

Referência

Instrução End

Err

Declaração Saída (Visual Basic)

Instrução On Error (Visual Basic)

Exception

Instrução GoTo