<% Option Explicit
'-------------
'错误处理:
'-------------
'1.需在每一行可能发生错误的代码上使用"On Error" 和 "If Err.Number <> 0 Then ..." 结构。 注意作用域!
'2.On Error语句: 启用或禁用错误处理程序
' * On Error GoTo 0: 禁用错误处理。
' * On Error Resume Next:开启错误处理。
' 若未使用On Error Resume Next语句,所发生的运行时错误将显示错误信息,同时,代码的执行也随之终止。
' 但当你采用它时,就会使程序不顾运行时错误,跳过产生错误的语句继续执行。之后可以在过程内部建立错误处理例程。
' 若调用其他过程时,On Error Resume Next语句变为非活动的,应在每个调用的例程中执行On Error Resume Next 语句。
sub Err1()
dim i
On Error Resume Next
i=99/0
If Err.number<>0 then
response.Write ("出错了")
response.End() '如果不写的话,会继续执行下面程序。
End if
response.Write ("错误已跳过")
end sub
sub Err2()
On Error Resume Next
response.Write (var1)
response.Write (111)
On Error GoTo 0
response.Write (var2)
response.Write (222)
end sub
sub Err3() '//用err.raise自定义错误信息
On Error Resume Next
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
'这个DSN实际上不存在,所以返回错误信息
Conn.Open "foo"
If Err.Number <> 0 then
Err.Clear
'Err.Raise可以凭空产生错误
Err.Raise vbObjectError + 7, "ErrTest.asp", "Connection Open Method Failed"
response.Write ("已使用Err.Raise"&"</br>")
End If
If err.Number <> 0 then
Response.Write("Error On line -> " & Err.Number - vbObjectError)
Response.write("<BR>Error Source -> " & Err.Source)
Response.Write("<BR>Error Desc -> " & Err.Description)
Err.Clear
End If
end sub
'call Err1()
'//运行结果: 出错了
'call Err2()
'//运行结果:
'111
'Microsoft VBScript 运行时错误 错误 '800a01f4' 变量未定义: 'var2'
call Err3()
'//运行结果:
'已使用Err.Raise
'Error On line -> 7
'Error Source -> ErrTest.asp
'Error Desc -> Connection Open Method Failed
%>