Tratamento de erros no ASP
Boa noite computêros, muitas vezes precisamos incluir um tratamento de erros em determinada parte do código, em algumas linguagens de programação este tratamento é realizado através do bloco try catch, mas e no ASP como é feito?Na minha humilde opinião o tratamento de erros no ASP é a coisa mais porca e mal feita que existe, vamos dizer que ele simplesmente não existe, é verdade, não existe um tratamento de erro realmente, o que existe é o famoso On error resume next, que se utilizado de forma errada pode tornar-se um grande problema em seu código.
Vamos ver o seguinte código:
Dim num1 : num1 = Request.QueryString("n1")
Dim num2 : num2 = Request.QueryString("n2")
Response.Write(num1/num2)
O que acontecerá se as variáveis num1 e num2 estiverem vazias?
O IIS irá retornar o seguinte erro:
Erro de tempo de execução do Microsoft VBScript erro ’800a0006′
Estouro
E se as variáveis tiverem um valor, mas o num2 seja 0? Como sabemos (ou deveríamos saber) não podemos dividir um número por 0, então o IIS irá retornar o seguinte erro:
Erro de tempo de execução do Microsoft VBScript erro ’800a000b’
Divisão por zero
São coisas que podem acontecer que devemos ter em mente, portanto podemos validar campo a campo o valor que ele pode (ou não) ter, mas nem sempre isso é possível, aprensento à vocês o íncrivel tratamento de erros no ASP.
On error resume next – o IIS irá ignorar o erro e prosseguir para a próxima linha de código.
On error go to 0 – “desliga” o on error resume next, muito importante utilizado para que o erro seja ignorado somente em um bloco e não em todo o código.
err – guarda os dados do último erro ocorrido no código
Para tratarmos se um erro ocorreu ou não dentro de um bloco verificamos o err.number, se for diferente de 0, é porque houve um erro, se for igual a 0 não houve nada de errado.
Vamos ao esboço do código:
On error resume next
'procedimento que pode gerar erro
if err.number <> 0 then
'trata o erro ocorrido
end if
On error goto 0
Agora vamos ver o exemplo interior da divisão dos números, mas agora tratando o erro, caso ele exista:
Dim num1 : num1 = Request.QueryString("n1") 'recebe a variavel da querystring
Dim num2 : num2 = Request.QueryString("n2") 'recebe a variavel da querystring
On error resume next 'ignora um erro caso haja
Response.Write(num1/num2) 'imprime num1 dividido por num2
if err.number <> 0 then 'se o erro é diferente de 0, é porque há um errp
Call trataErro() 'chama a função de tratamento de erros
end if
On error goto 0 '"desliga" o on error resume next
Sub trataErro() 'função para o tratamento de erros
Response.Write("Um erro foi identificado: " & _
"Código do erro:" & err.number & "" & _
"Descrição do erro:" & err.description)
End Sub
Espero que tenha ajudado, caso tenham alguma dúvida, já sabem, comentem!
Vlw cara , otimo artigo, me ajudou bastante !