Tratamento de erros no ASP
computêro | 19/08/2009Boa 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:
1 2 3 | 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:
1 2 3 4 5 6 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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: <br />" & _ "<strong>Código do erro:</strong>" & err.number & "<br />" & _ "<strong>Descrição do erro:</strong>" & err.description) End Sub |
Espero que tenha ajudado, caso tenham alguma dúvida, já sabem, comentem!
Popularity: 29% [?]
Nenhum post relacionado.
Posts relacionados trazidos a você pelo Yet Another Related Posts Plugin.







