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!