The VBScript language provides two statements and an object to handle “runtime errors,” as follows:
On Error Resume Next statement
On Error Goto 0 statement
Err object
A brief introduction to On Error Resume Next, On Error Goto 0, Err
The On Error Resume Next statement and On Error Goto 0 statements indicate what to do when “runtime Error” occurs.
When you add the On Error Resume Next statement, if the following program has a “runtime Error,” it will continue to run without interruption.
When the On Error Goto 0 statement is added, if the following program has a “runtime Error”, an “Error message” is displayed and execution of the program is stopped.
The Err object holds the error message
The following examples are used to explain On Error Resume Next, On Error Goto 0, and Err
The On Error Resume Next statement was not added
If the “On Error Resume Next” statement is not included, when “run time Error” occurs, an “Error message” is displayed and execution of the program is stopped.
Example (/test.asp) :
i = 1/0 Divide by '0', generate "runtime error", display "error message" and stop program execution. Response.Write "After the divide is executed" 'This sentence will not be executed' %>
Results:
Microsoft VBScript runtime error error ‘800A000b’
Be zero except
/ test. The asp, line 2
Add the On Error Resume Next statement
When we add the “On Error Resume Next” statement somewhere, subsequent programs don’t show “Error messages” and continue to run even if they do.
For example:
On Error Resume Next The program that follows will continue to run even if a "runtime error" occurs. i = 1/0 '0 to divide, this is a "runtime error", but because of the above On Error Resume Next, the execution will not be interrupted, but will continue to run. Response.Write "after the divide is executed" 'This will be executed' %>
Results:
After the division is performed
With the On Error Resume Next statement, use the Err object to get the Error message
After using On Error Resume Next, if there is an Error, the Err object will put the last Error message.
There are three important properties of Err object: Number, Source, and Description. They are error number, error source, and error description.
All you can catch are runtime errors, and If Err then is equivalent to If Err.Number then
Dim i i = 1/0 'the fisrt wrong undefined_function "test" 'the second wrong,Function undefined_function undefined Response.Write Err.Description
Operation results:
Type mismatch
As you can see, it’s not being divided by zero
Use the On Error Goto 0 statement to let the system take over the handling of the Error
With the On Error Resume Next statement, the following programs will continue to run even if there is a “runtime Error.” But what if you want a later program to stop executing and display an error when it has a “runtime error”?
The answer is: use the On Error Goto 0 statement
Using the statement “On Error Goto 0”, the following program will prompt an Error and terminate the execution of the script as soon as an Error occurs.
Dim i i = 1/0 Response.Write "After the execution of the first exclusion" On Error Goto 0 'The statement after 'will alert for an error and end script execution as soon as an error occurs. i = 1/0 Response.Write "After the execution of the second division"
Operation results:
After the first division is performed
Microsoft VBScript runtime error error ‘800A000b’
Be zero except
/ test. The asp, line 2
As you can see, the first response.write executes and prints the content, while the second response.write does not execute.
Talk about On Error Resume Next in detail
Scope of action for On Error Resume Next statement
The On Error Resume Next statement only applies to subsequent statements at this level. Does not apply to the function or subroutine being called, nor does it apply to the parent segment
The On Error Resume Next statement affects only this function if it appears in a function. It has no effect on either the “calling function” or the “called function”
If there is no On Error Resume Next statement in a subroutine, an Error in the subroutine will interrupt the subroutine and jump to the outer program that calls the subroutine. If the outer program contains the On Error Resume Next statement before the function call in question, it will then execute the statement after the function call. If the outer program does not have an On Error Resume Next statement before the function call that went wrong, it jumps to the outer program. This process is repeated until the environment containing the On Error Resume Next statement is found to continue running. If the outermost program also does not contain the On Error Resume Next statement, the default Error handler is used, which is to display the Error message and stop running.
For example:
Dim i i = 1/0 Response.Write "OK" End Sub Sub test1() test Response.Write "OK" End Sub On Error Resume Next test1
Results:
After the division is performed
Neither OK is printed. Since On Error Resume Next is issued in the outermost layer, when something goes wrong with the subroutine being called, it jumps right out of the subroutine and into the outer code.
If you put an On Error Resume Next statement at the beginning of the subroutine, the runtime Error does not abort the subroutine.
For example, if you need to write a string to a file, you can access the file through a separate function to prevent errors from interrupting the entire program:
'returns True if it succeeds, or False on any error Function WriteNewFile(strFileName, strContent) On Error Resume Next 'turn off the default error handler WiteNewFile = Flase 'default return value of function Set objFSO = CreateObject("scripting.FileSystemObject") If Err.Number = 0 Then Set objFile = objFSO.CreateTextFile(strFileName,True) If Err.Number = 0 Then objFile.WriteLine strContent If Err.Number = 0 Then objFile.Close If Err.Number = 0 Then WriteNewFile = True End Function
The above program checks the Err object’s Number attribute before processing each program statement. If the value is 0 (no errors have occurred yet), then the creation and writing of the file can continue. If an error occurs, the script engine sets the value of the Err object’s property and proceeds to the next line.
The return value of the function is set to “True” as long as it works without causing an error. Otherwise, the function returns “False”.
On Error Goto 0 statement
In ASP 2.0 (although not documented) and ASP 3.0, the On Error Goto 0 statement restores the default Error handling behavior.
After running this statement, a run-time error results in default error handling, checking each nested program in the environment chain up to the home page code. If no other environment turns off the default error handling, the execution of the page will stop and the IIS default error page will be displayed.
Err object
In the previous example, after turning off default error handling, check to see if an error has occurred by checking the Number attribute of the Err object.
The Err object stores information about run-time errors
The following table shows the properties provided by the Err object.
</ th> | </ th> </ tr> | ||||
---|---|---|---|---|---|
Description </ td> | sets or returns a string Description error </ td> </ tr> | Number </ td> | (default property) sets or returns a false value specified </ td> </ tr> | Source </ td> | Sets or returns the name of the object that generated the error |
You can use these properties to check what kind of error occurred. For example, you can take different actions based on the error number, or you can provide the user with error information using the attribute values of Source and Description.
The following table shows the methods provided by the Err object.
</ th> | </ th> </ tr> | ||
---|---|---|---|
Clear </ td> | remove all current Err object set </ td> </ tr> | Raise </ td> | generate a runtime error </ td> </ tr> </ tbody> </ table>
A “custom error” is generated using the Err object. You can generate a “custom error” using the Err object. Why do we do this?Because sometimes you want to send a custom error message to the user. You can set the Err object’s properties to whatever value you want, and then call the Raise method to cause such an error, which will stop the program and pass the error back down the call chain. Set objFSO = CreateObject("scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("strFileName", ForReading) Select Case Err.Number Case 0 'OK, take no action Case 50,53 'standard file or path not found errors 'create custom error values and raise error back up the call chain intErrNumber = vbObjectError + 1073 'custom error number strErrDescription = "The file has been deleted or moved. " strErrSource = " ReadThisFile function" Err.Raise intErrNumber, strErrSource, strErrDescription Exit Function Case Else 'som other error 'raise the standard error back up the call chain Err.Raise Err.Number, Err.Source, Err.Description Exit Function End Select ReadThisFile = objFile.ReadAll ' we opened it OK, so return the content objFile.Close End Function The code that calls this function can use the On Error Resume Next statement and catch the Error that this function produces. strContent = ReadThisFile("myfile.txt") If Err.Number = 0 Then Response.Write "File content is:<br/>" & strContent Else Response.Write Err.Source & "<br/>" & Err.Description End If |