A VBScript12
A VBScript12
Session 12
1
?What We’ve learned last session
What is OOP and the OOP model.
What is an object, how to create an object, use
methods, properties and attribures
How to set object to variables, and how to free the
variables.
What is a collection and a container object.
What is COM objects, how do they defined
The FileSystem object, how to create,delete,read,copy
files and directories, how to get system information.
2
Subjects for session 12
Error Handling
On Error statements
On Error Goto 0
On Error Resume Next
Err Object
Methods.
Properties.
vbObjectError constant
3
Error Handling
!Expect the Unexpected
There are two ways of producing error-free software.
But only the third will work ...
Unknown Author
Benjamin Disraeli
4
Error Handling
?Why
There are bugs than can eliminate an entire project.
There are also bugs that can kill people.
Reliability is a major characteristic of high-quality
software.
Software should behave well in nearly every situation.
During the development process we try to avoid, detect
and remove as many errors as possible.
We cannot assume that the delivered software is free
of errors. Therefore, we have to think about
mechanisms to protect the productive system from
unacceptable behaviour while erroneous situations
occurs.
5
Error Handling
Goals
We want to be prepared for the program changing
into a bad state.
In most cases there will be no return from the bad
state to a good state and the program has to be
terminated in a controlled way.
Of course, whenever possible the program tries to
get out of trouble by itself, but normally it would be
very difficult to recover from a serious error
situation.
During specification the boundary between the
normal, abnormal and erroneous behaviour is drawn
and this boundary remains visible down to the code.
6
Error Handling
Goals
We want to minimize the set of disastrous
states by foreseeing these situations and
thus converting them to expected
situations.
An error handling concept defines which
errors must be distinguished and how the
system reacts to these errors.
Such a concept can be very simple or very
complicated.
7
Error Handling
Terminology
Detects
cts
t e
De
Raises Exception
Detector
8
Error Handling
Terminology - Fault
9
Error Handling
Terminology - Error
A user error is a mistake made by a user when
operating a software system.
The system is able to react to these mistakes,
because it is designed to expect such situations
and it is a part of the required functionality.
The handling of those situations, which of course
can be abnormal, should be treated in the user
interface component of the system.
In contrast to an error, a user error (hopefully)
can not result in a system crash, but like a
system error, a user error normally can result in
an exception raised by a system component.
10
Error Handling
Terminology - Failure
11
Error Handling
Terminology - Detector
Before software can react to any error it has to
detect one first.
If we look at the error handling as a separate
software system, errors and failures of an
application are the phenomena the error handling
system observes.
Thus a detector is the interface between the error
and failures happening outside and their internal
handling.
The number, place and kind of detectors have
great impact on the quality of an error handling
system.
12
Error Handling
Terminology - Exception
Generally, any occurrence of an abnormal condition that
causes an interruption in normal control flow is called an
exception.
It is said that an exception is raised (thrown) when such a
condition is signaled by a software unit.
In response to an exception, the control is immediately given
to a designated handler for the exception, which reacts to
that situation (exception handler).
The handler can try to recover from that exception in order to
continue at a prede-fined location or it cleans up the
environment and further escalates the exception.
exceptions are not only a mechanism which can be used to
handle errors and program failures.
13
Error Handling
Summary
No software system can be assumed to behave totally
correct.
Even careful testing and the use of formal methods
does not guarantee error-free software, hence we
cannot rely on a “perfect world” assumption.
Because we cannot prevent errors we have to live with
them.
The software must be able to detect errors and to
defeat them with appropriate recovery techniques and
mechanisms in order to restore normal operation.
14
On Error Statements
Enables or disables error-handling.
If you don't use an On Error Resume Next
statement anywhere in your code, any run-time
error that occurs can cause an error message to
be displayed and code execution stopped.
This sample of error message generated when
trying to open a file that not exists.
15
On Error Statements
However, the host running the code determines
the exact behavior.
The host can sometimes opt to handle such errors
differently.
In some cases, the script debugger may be
invoked at the point of the error.
n still other cases, there may be no apparent
indication that any error occurred because the
host does not to notify the user.
Again, this is purely a function of how the host
handles any errors that occur.
16
On Error Statements
Within any particular procedure, an error is not
necessarily fatal as long as error-handling is
enabled somewhere along the call stack.
If local error-handling is not enabled in a
procedure and an error occurs, control is passed
back through the call stack until a procedure with
error-handling enabled is found and the error is
handled at that point.
If no procedure in the call stack is found to have
error-handling enabled, an error message is
displayed at that point and execution stops or the
host handles the error as appropriate.
17
On Error Resume Next
uses execution to continue with the statement immediately
following the statement that caused the run-time error, or
with the statement immediately following the most recent call
out of the procedure containing the On Error Resume Next
statement.
his allows execution to continue despite a run-time error.
You can then build the error-handling routine inline within the
procedure.
An On Error Resume Next statement becomes inactive
when another procedure is called, so you should execute an
On Error Resume Next statement in each called routine if
you want inline error handling within that routine.
18
On Error Resume Next
hen a procedure is exited, the error-
handling capability reverts to whatever
error-handling was in place before
entering the exited procedure.
Use On Error GoTo 0 to disable error
handling if you have previously enabled it
using On Error Resume Next.
19
On Error Resume Next
hen a procedure is exited, the error-
handling capability reverts to whatever
error-handling was in place before
entering the exited procedure.
Use On Error GoTo 0 to disable error
handling if you have previously enabled it
using On Error Resume Next.
20
On Error Resume Next
Pros and Cons
Episode of the Simpsons (Notes)
Problem: On Error Resume Next doesn’t actually fix the
problem, it merely removes it from view.
On Error Resume Next is no miracle cure for scripting.
When you start a script, assuming there are no syntax
errors that would cause the script to crash before it
ever gets going, WSH tries to run the first line of code.
If the line runs successfully, WSH then tries to run the
second line of code.
This process continues until each line of code has been
executed.
At that point, the script automatically terminates.
21
On Error Resume Next
Pros and Cons
But what if WSH encounters a line of code that it can’t
run successfully? Without On Error Resume Next, the
script would come to a crashing halt, the script process
would end, and an error message would be displayed.
If you’ve included On Error Resume Next, however, the
script typically won’t blow up; instead, WSH will simply
skip the line it can’t run and try running the next line.
100-line script sample.
There’s definitely value in having a script that can
recover from errors, especially when that script is being
used by other people.
22
On Error Resume Next
?Why? When? How
We have here a simple code :
Notice the mistake we made in line 3: instead of
typing b = 2, we typed b 2:
On Error Resume Next
Dim a
a=1
b2
MsgBox a+b
The answer you will get is 1
we’ve managed to turn our fancy new computer
into a machine that can’t even add 2 and 1!
23
On Error Resume Next
Why? When? How?
B 2 is not a valid statement, and when WSH
encounters this line an error occurs.
However, On Error Resume Next suppresses this
error.
WSH then attempts to run the next line of code,
something which, in this case, leads to problems.
Because of that, B is not assigned the value 2.
And because no value has been assigned to B, it
automatically assumes the value of 0.
24
On Error Resume Next
Why? When? How?
Because you know that this answer is wrong (I
hope) and because this script is so short, you
probably know that the script needs debugging
In this case, then, debugging the script is easy.
But suppose this script was several hundred lines
long, and suppose this was a much more
complicated mathematical equation.
In that case, you might not know that the answer
was wrong; even if you did, you might have
trouble tracking down the problem.
25
On Error Resume Next
Why? When? How?
Running now tge script again will cause the follow
message to be displayed
26
On Error Resume Next
?Why? When? How
Often in larger scripts we move to step 2
There are two things we need to do here.
First, read the error message.
Second, pay attention to the line number reported
in the error message.
Step 3 figure out the problem based on the error
message, one thing you can do is look up the
error code (800A000D) at the Microsoft Support
site or VBScript documenatation, don’t forget that
the value is hexadecimal so convert only the last
4 digits (000D) to a decimal number (13)
For this Error in the VBScript documentation you
will get “Type Mismatch”
27
On Error Resume Next
?Why? When? How
For larger scripts is recommended
to implement the following routines
Break your script into sections and test
each section separately. Make sure
each individual section is working
before you re-test the script as a
whole.
Implement a Trace Routine using
msgboxes, acommand-line tool or
displaying messages to the screen.
28
On Error Resume Next
Why? When? How?
29
Err Object
Contains information about run-time errors.
The Err object is an intrinsic object with global
scope — there is no need to create an instance of
it in your code.
The properties of the Err object are set by the
generator of an error — Visual Basic, an
Automation object, or the VBScript programmer.
The default property of the Err object is Number.
Err.Number contains an integer and can be used
by an Automation object to return an SCODE.
30
Err Object
When a run-time error occurs, the properties of
the Err object are filled with information that
uniquely identifies the error and information that
can be used to handle it.
To generate a run-time error in your code, use
the Raise method.
The Err object's properties are reset to zero or
zero-length strings ("") after an On Error
Resume Next statement.
The Clear method can be used to explicitly reset
Err.
31
Err Object Properties and Methods
Number Property
object.Number [= errornumber]
32
Err Object Properties and Methods
Description Property
object.Description [= stringexpression]
33
Err Object Properties and Methods
Source Property
object.Source [= stringexpression]
34
Err Object Properties and Methods
Source Property
Source always contains the name of the object
that originally generated the error.
your code can try to handle the error according to
the error documentation of the object you
accessed.
If your error handler fails, you can use the Err
object information to describe the error to your
user, using Source and the other Err to inform
the user which object originally caused the error,
its description of the error, and so forth.
35
Err Object Properties and Methods
Help File Property
object.HelpFile [= contextID]
36
Err Object Properties and Methods
Help Context Property
object.HelpContext [= contextID]
37
Err Object Properties and Methods
Clear Method
object.Clear
38
Err Object Properties and Methods
Raise Method
object.Raise(number, source, description, helpfile, helpcontext)
39
?What’s Next
Regulars Expressions.
Methods and properties.
How to use the object and the
object collections.
How to create complex patterns.
40