powerpoint 10

advertisement
CSC 298
Exception Handling
C# 1
Motivation
 We want to prevent our program from giving wrong


answers or worse crashing.
Standard approach: check any values used for a
computation (e.g., is the grade between 0 and 4?)
However, sometimes, we have no control over
circumstances that might affect our program
 What if the disk drive fails while writing to it?
 Exception handling: a facility to allow the
programmer to
 insert code to handle unexpected errors
 allow the program to recover and continue executing,
or terminate gracefully.
C# 2
throw statement
 Use a throw statement to signal to the user an
abnormal condition
 e.g.
public double Sqrt(double x)
{
if (x<0)
throw new ArgumentException(
"Negative value x=" + x);
else
// Note: Math.Sqrt(-10) is NaN
return Math.Sqrt(x);
}
C# 3
try – catch statement (1)
 Enclose in a try block any code that might throw
an exception. If an exception is thrown, the
control flow is transferred to the appropriate
catch block following the try block.
 catching an exception
try
{
Console.WriteLine(Sqrt(-10));
}
catch (ArgumentException ae)
{
Console.WriteLine(ae.Message);
}
C# 4
try and catch (2)
 Write in the try block the code that might throw
exceptions (different types of exception might
be thrown).
 Write in one or more catch clauses the code to
handle the exceptions
try{
//statements that might throw exceptions
}
catch(ExceptionType1 e1){/*handling code*/}
catch(ExceptionType2 e2){/*handling code*/}
 What if the type of the exception is not listed in
the catch clauses?
 What happens once we are done with the
C# 5
catch clause?
Control flow for exceptions
 When an exception is thrown in a try block
 the control flow goes to the first catch block
listed after the try block that matches the
exception type (same class or a superclass)
 Once done with the catch clause, execution
resumes with the first statement after the list of
the catch blocks. Execution doesn't go back in
the try block.
 If no matching catch is found in the method, the
CLR looks for a matching catch in the caller of
the method. The process goes on until a catch
is found.
 If no catch is found, the program or thread
C# 6
aborts.
catch { }
 Don't use any argument in the catch to catch all
exceptions (but don't get any information about
the exception)
try{
//statements that might throw
//exceptions
}
catch { /*all exceptions are caught here*/ }
 Always write catch blocks from the most specific
to the least specific (catch {} should always be
last).
C# 7
finally statement
 Sometimes some operations must be done
before leaving a method (e.g. closing a
connection to a database). What if the code
leaves abruptly the method by throwing an
exception?
 Code written within a finally block is always
executed (whether an exception is thrown or not)
try{}
catch (...){}
finally{ /* always done */ }
C# 8
Exception classes
 Check "exceptions, hierarchies" (within the help index of
Visual studio).
 Exception class: base class of all exceptions.
 Some properties of exception objects
 Message: a String describing the exception
 StackTrace: a String that the chain of calls on the stack
when the exception was thrown.
 InnerException: it may be possible to wrap an exception
within an exception (e.g. when rethrowing an exception)
catch(ExceptionType1 e1){
ExceptionType2 e2 = new ExceptionType2
("message", e1); //if such constructor
// e2.InnerException is e1
throw e2;
}
C# 9
Creating your own exceptions
 Extend the ApplicationException class and add
your own custom methods and properties.
 ApplicationException is never thrown by the
CLR (allows to differentiate between exceptions
thrown by the system, and exceptions thrown
by a user program).
C# 10
Download