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:
An Instrução End is encountered within the Try or Catch block.
A StackOverflowException is thrown within the Try or Catch block.
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çã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
Declaração Saída (Visual Basic)