VB.NET : tratamento de erros usando Try-Catch-Finally


Capturar e tratar erros(exceções) é uma das tarefas obrigatórias para todo o programador. O VB.NET trouxe uma novidade que nos auxilia no tratamento de erros : o bloco try-catch-finally. (Se você conhece Java esta em casa...).

O bloco try-catch-finally é usado para envolver o código onde existe a possibilidade de uma exceção/erro ocorrer. Um bloco try-catch-finally é constituído das seguintes seções :

  1. O código que pode gerar uma exceção é colocando dentro do bloco try
  2. Se o erro/exceção ocorrer o bloco catch entra em ação e o você faz o tratamento do erro
  3. Dentro do bloco finally você coloca o código que deverá ser executado sempre quer ocorra ou não a exceção.
Try
 
 'Código que pode gerar(levantar)  um erro.
Catch
   '
Código para tratamento de erros.
Finally
  
'Código de execução obrigatória.

End Try

Obs: O VB.NET ainda mantém , por questões de compatibilidade ,  a sintaxe : "On Error Goto" e você ainda pode usá-la mas prefira usar a estrutura try-catch.

A estrutura try-catch-finally é mais poderosa que a sintaxe anterior pois além de permitir a você fazer um aninhamento de vários tratamentos de erros na mesma estrutura , torna o código mais fácil de ler e manter.

Vamos mostrar na prática o que acabamos de afirmar:

1- Crie uma nova aplicação do tipo Console no Visual Basic.NET

2- No procedimento Sub Main() insira o código abaixo. Este código declara e inicializa três variáveis ; a inicialização da variável k irá causar um erro pois estamos efetuando uma divisão por zero.

Sub Main()
     'Este código gera um erro/exceção
    
Console.WriteLine("Vamos dividir 10 por 0 para ver o que acontece...")
     Console.WriteLine()

     Dim i As Integer = 10
     Dim j As Integer = 0
     Dim k As Integer

     ' Esta linha vai gerar um erro
   
 k = (i / j)
End Sub

 

Agora execute o projeto e veja o resultado: O sistema irá gerar uma exceção/erro


 

Vamos agora usar try-catch para tratar o erro. Primeiro vamos inserir o código suspeito de gerar o erro no bloco try e se ocorrer um erro vamos tratá-lo no bloco catch. Veja como fica uma possível utilização para o caso:

Sub Main()
     'Este código gera um erro/exceção

try
     Console.WriteLine("Vamos dividir 10 por 0 para ver o que acontece...")
     Console.WriteLine()

     Dim i As Integer = 10
     Dim j As Integer = 0
     Dim k As Integer

     ' Esta linha vai gerar um erro
   
 k = (i / j)

catch

     Console.WriteLine("Ocorreu um erro fatal... ")

End Try

End Sub

Agora execute o código e veja o resultado:

Observe que não usamos o bloco finally , e que encerramos o bloco com a cláusula - End Try.

Se você quiser , pode usar o bloco finally para executar um código obrigatório. Neste exemplo vamos incluir o bloco finally sempre executando o código : Console.ReadLine()

Dim i As Integer = 10
Dim j As Integer = 0
Dim k As Integer 
Try
  k = i \ j
Catch exc As Exception
  Console.WriteLine("Ocorreu um erro !")
Finally
  Console.ReadLine()
End Try

Capturando Múltiplas Exceções

Você pode detalhar ainda mais o seu tratamento de erros prevendo múltiplas exceções e tratando-as . Vejamos como fica o nosso exemplo :

Dim i As Integer = 2147483647
Dim j As Integer = 0
Dim k As Integer = 0

Try
  i+ = 1
  k=i/j 
Catch exc As DivideByZeroException
  Console.WriteLine("Erro: Divisão por zero")
Catch exc As OverflowException
  Console.WriteLine("Erro: Overflow")
Finally
  Console.ReadLine()
End Try

Neste código estamos prevendo duas exceções :  Divisão por zero e Overflow. Isto permite uma detalhamento do erro facilitando a localização de sua origem. Naturalmente você não vai querer tratar todas as exceções possíveis ; neste caso você  usa um bloco catch genérico que trate os erros não previstos, algo como o código abaixo:

  1. Catch exc As Exception
    Console.WriteLine("Erro: " & exc.Message)
Dim i As Integer = 2147483647
Dim j As Integer = 0
Dim k As Integer = 0

Try
  i+ = 1
  k=i/j 
Catch exc As DivideByZeroException
  Console.WriteLine("Erro: Divisão por zero")
Catch exc As OverflowException
  Console.WriteLine("Erro: Overflow")
Catch exc As Exception
  Console.WriteLine("Error: " & exc.Message)
Finally
  Console.ReadLine()
End Try

Então esqueça o velho - On error go to - e passe a usar o bloco try-catch-finally ; é a melhor maneira de tratar exceções em seu código.

E é só... até  logo ...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti