Top Banner
2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling Enable clear, robust and more fault-tolerant programs Process synchronous errors Follows the termination model of exception handling Provided by System.Exception • Keywords – try • Include code in which exceptions might occur – catch • Code to handle the exception • Must be of class Exception or one that extends it directly or indirectly – finally • (Optional) code present here will always execute
27

2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

Jan 11, 2016

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall. All rights reserved.

1

Exception Handling Overview

• Exception handling– Enable clear, robust and more fault-tolerant programs– Process synchronous errors– Follows the termination model of exception handling– Provided by System.Exception

• Keywords– try

• Include code in which exceptions might occur– catch

• Code to handle the exception• Must be of class Exception or one that extends it directly or

indirectly– finally

• (Optional) code present here will always execute

Page 2: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall. All rights reserved.

2

Example: DivideByZeroException

• Error catching– Method Convert.ToInt32 will automatically detect for

invalid representation of an integer• Method generates a FormatException

– CLR has automatic detection for division by zero• Occurrence will cause a DivideByZeroException

• Demos

Page 3: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline3

46 private void divideButton_Click (object sender, System.EventArgs e )48 {49 outputLabel.Text = "";50 51 // retrieve user input and call Quotient

52 try53 {54 // Convert.ToInt32 generates FormatException if 55 // argument is not an integer

56 int numerator = Convert.ToInt32( numeratorTextBox.Text );57 int denominator =

58 Convert.ToInt32( denominatorTextBox.Text );59 60 // division generates DivideByZeroException if61 // denominator is 0

62 int result = numerator / denominator;63 64 outputLabel.Text = result.ToString();65 66 } // end try67

Try block encloses codes that could result in a throw exception

Will not be reached (executed) if an exception is thrown

FormatException thrown if it cannot convert string into integer

DivideByZeroException thrown if denominator is zero

Page 4: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline4

68 // process invalid number format

69 catch ( FormatException )70 {

71 MessageBox.Show( "You must enter two integers",72 "Invalid Number Format", 73 MessageBoxButtons.OK, MessageBoxIcon.Error );74 }75 76 // user attempted to divide by zero

77 catch (DivideByZeroException divideByZeroException)78 {

79 MessageBox.Show( divideByZeroException.Message,80 "Attempted to Divide by Zero",81 MessageBoxButtons.OK, MessageBoxIcon.Error );82 }83 84 } // end method divideButton_Click85 86 } // end class DivideByZeroTest

Catch handler for FormatException

Catch handler for DivideByZeroException

Keyword

Message box to display error message

Handler uses property Message of class Exception

Page 5: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline5

Program Output

When incorrect format are entered into either input fields

When attempting to diving by zero

Page 6: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall. All rights reserved.

6

When to use exception handling

• Avoid exception handling except for error handling

• Try to include from inception of design• Exception has little overhead, so handling more

efficient than trying to perform error handling with if statements.– Use only for infrequent problems

• Methods with common error conditions should return null rather than throwing exceptions.

• Parameter-less catch handler must be last one

Page 7: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall. All rights reserved.

7

.NET Exception Hierarchy

• .Net Framework– Class Exception is base class

– Derived classes:• ApplicationException

– Programmer use to create data types specific to their application

– Low chance of program stopping execution

– Can create programmer-defined exception classes• SystemException

– CLR can generate at any point during execution

– Runtime exception

– Can be avoided with proper coding

• Example: IndexOutOfRangeException

Page 8: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall. All rights reserved.

8

Finally Block

• Resource leak– Aborting a program and leaving a resource in a state in

which other programs are unable to acquire the resource

• Finally block– Ideal for deallocation code to release resources acquired in

try block– Execute immediately after catch handler or try block– Must be present if no catch block is present– Is optional if more than one or more catch handler exist

Page 9: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall. All rights reserved.

9

Throw expression

• Programmer can detect non-system errors and cause an exception to be thrown

• Must use throw (an exception object)• Must be of either class Exception or one of its

derived classes• Customize the exception type thrown from

methods

Page 10: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline10

7 class UsingExceptions8 {9 // entry point for application10 static void Main( string[] args )11 {12 // Case 1: No exceptions occur in called method.13 Console.WriteLine( "Calling DoesNotThrowException" );

14 DoesNotThrowException();15 16 // Case 2: Exception occurs and is caught 17 // in called method.18 Console.WriteLine( "\nCalling ThrowExceptionWithCatch" );

19 ThrowExceptionWithCatch();20 21 // Case 3: Exception occurs, but not caught22 // in called method, because no catch handlers.23 Console.WriteLine( 24 "\nCalling ThrowExceptionWithoutCatch" );25 26 // call ThrowExceptionWithoutCatch

27 try 28 {

29 ThrowExceptionWithoutCatch();30 }32 // process exception returned from ThrowExceptionWithoutCatch

34 catch 35 {36 Console.WriteLine( "Caught exception from " + 37 "ThrowExceptionWithoutCatch in Main" );38 }

Static methods of this class

Page 11: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline11

39 40 // Case 4: Exception occurs and is caught41 // in called method, then rethrown to caller.42 Console.WriteLine( 43 "\nCalling ThrowExceptionCatchRethrow" );44 45 // call ThrowExceptionCatchRethrow

46 try 47 {

48 ThrowExceptionCatchRethrow();49 }50 51 // process exception returned from 52 // ThrowExceptionCatchRethrow

53 catch54 {55 Console.WriteLine( "Caught exception from " + 56 "ThrowExceptionCatchRethrow in Main" );57 }58 59 } // end method Main60

LOOK AT D&D– page 605-608!!!

Another static method of class UsingExceptions

Page 12: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline12

Calling DoesNotThrowExceptionIn DoesNotThrowExceptionFinally executed in DoesNotThrowExceptionEnd of DoesNotThrowException Calling ThrowExceptionWithCatchIn ThrowExceptionWithCatchMessage: Exception in ThrowExceptionWithCatchFinally executed in ThrowExceptionWithCatchEnd of ThrowExceptionWithCatch Calling ThrowExceptionWithoutCatchIn ThrowExceptionWithoutCatchFinally executed in ThrowExceptionWithoutCatchCaught exception from ThrowExceptionWithoutCatch in Main Calling ThrowExceptionCatchRethrowIn ThrowExceptionCatchRethrowMessage: Exception in ThrowExceptionCatchRethrowFinally executed in ThrowExceptionCatchRethrowCaught exception from ThrowExceptionCatchRethrow in Main

LOOK AT D&D TEXT – page 373-374!!!

Page 13: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall. All rights reserved.

13

Exception Properties

• Message• Stores the error message associated with an Exception object

– May be a default message or customized

• StackTrace• Contain a string that represents the method call stack

• Represent sequential list of methods that were not fully processed when the exception occurred

• The exact location is called the throw point

Page 14: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall. All rights reserved.

14

Exception Properties

• InnerException– “Wrap” exception objects caught in code, then throw new

exception types

– Example: • Convert.ToInt32 throws FormatException• Programmer creates new exception type

InvalidAccountNumberFormatException

• code catches FormatException, creates an exception object of the new exception type in the catch handler, passing the original exception as one of constructor’s arguments

• The original exception object becomes the InnerException of the new exception object.

• Thus, when an InvalidAccountNumberFormatException occurs, can view the InnerException property and see the problem was an invalid number format

Page 15: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline15

Main becomes first method on the method call stack

Invoked in try block, becomes second on method call stack

8 class Properties9 {10 static void Main( string[] args )11 {12 // call Method1, any Exception it generates will be 13 // caught in the catch handler that follows14 try 15 {16 Method1();17 }18 19 // Output string representation of Exception, then20 // output values of InnerException, Message,21 // and StackTrace properties22 catch ( Exception exception ) 23 {24 Console.WriteLine( 25 "exception.ToString(): \n{0}\n",26 exception.ToString() ); 27 28 Console.WriteLine( "exception.Message: \n{0}\n",29 exception.Message );30 31 Console.WriteLine( "exception.StackTrace: \n{0}\n",32 exception.StackTrace );33 34 Console.WriteLine( 35 "exception.InnerException: \n{0}",36 exception.InnerException );38 } // end catch

40 } // end Main

try block calls Method1

Page 16: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline16

41 42 // calls Method243 public static void Method1()44 {45 Method2();46 }47 48 // calls Method349 public static void Method2()50 {51 Method3();52 }53 54 // throws an Exception containing an InnerException55 public static void Method3()56 {57 // attempt to convert non-integer string to int58 try 59 {60 Convert.ToInt32( "Not an integer" );61 }62 63 // catch FormatException and wrap it in new Exception64 catch ( FormatException error ) 65 {66 throw new Exception( 67 "Exception occurred in Method3", error );68 }69 70 } // end method Method371 72 } // end class UsingExceptions

When control returns to method2, the CLR determines that there is no try block

Not an integer format, throws a FormatException

Properties.csHere also, the CLR searches for a try block, but unsuccessful it terminates and unwinds from the call stack

After catch block execute the exception is terminated from the method call stack

Catches the FormatException thrown by Convert.ToInt32

Catch handler creates an Exception object, then throws it

Page 17: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline17

Main becomes first method on the method call stack

Invoked in try block, becomes second on method call stack

8 class Properties9 {10 static void Main( string[] args )11 {12 // call Method1, any Exception it generates will be 13 // caught in the catch handler that follows14 try 15 {16 Method1();17 }18 19 // Output string representation of Exception, then20 // output values of InnerException, Message,21 // and StackTrace properties22 catch ( Exception exception ) 23 {24 Console.WriteLine( 25 "exception.ToString(): \n{0}\n",26 exception.ToString() ); 27 28 Console.WriteLine( "exception.Message: \n{0}\n",29 exception.Message );30 31 Console.WriteLine( "exception.StackTrace: \n{0}\n",32 exception.StackTrace );33 34 Console.WriteLine( 35 "exception.InnerException: \n{0}",36 exception.InnerException );38 } // end catch

40 } // end Main

When control returns from stack unwinding, try block is expired sending exception to catch block

Catch block uses method ToString and properties Message, StackTrace and InnerException to produce output

Page 18: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline18

exception.ToString():System.Exception: Exception occurred in Method3 ---> System.FormatException: Input string was not in a correct format. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at System.Convert.ToInt32(String s) at Properties.Method3() in f:\books\2001\csphtp1\csphtp1_examples\ch11\fig11_8\ properties\properties.cs:line 60 --- End of inner exception stack trace --- at Properties.Method3() in f:\books\2001\csphtp1\csphtp1_examples\ch11\fig11_8\ properties\properties.cs:line 66 at Properties.Method2() in f:\books\2001\csphtp1\csphtp1_examples\ch11\fig11_8\ properties\properties.cs:line 51 at Properties.Method1() in f:\books\2001\csphtp1\csphtp1_examples\ch11\fig11_8\ properties\properties.cs:line 45 at Properties.Main(String[] args) in f:\books\2001\csphtp1\csphtp1_examples\ch11\fig11_8\ properties\properties.cs:line 16

Name of the exception class followed by the Message property value

The next eight lines show the string representation of the InnerException object

Output for the StackTrace for the Exception thrown in Method3

Page 19: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline19

Properties.csProgram Output

exception.Message:Exception occurred in Method3 exception.StackTrace: at Properties.Method3() in f:\books\2001\csphtp1\csphtp1_examples\ch11\fig11_8\ properties\properties.cs:line 66 at Properties.Method2() in f:\books\2001\csphtp1\csphtp1_examples\ch11\fig11_8\ properties\properties.cs:line 51 at Properties.Method1() in f:\books\2001\csphtp1\csphtp1_examples\ch11\fig11_8\ properties\properties.cs:line 45 at Properties.Main(String[] args) in f:\books\2001\csphtp1\csphtp1_examples\ch11\fig11_8\ properties\properties.cs:line 16 exception.InnerException:System.FormatException: Input string was not in a correct format. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at System.Convert.ToInt32(String s) at Properties.Method3() in f:\books\2001\csphtp1\csphtp1_examples\ch11\fig11_8\ properties\properties.cs:line 60

These two line represent the Message property of the exception thrown in Method3

StackTrace property of the exception thrown in Method3

ToString representation of the InnerException property

Page 20: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall. All rights reserved.

20

Programmer-Defined Exception Classes

• Creating customized exception types– Should derive from class ApplicationException

– Should end with “Exception”

– Should define three constructors• A default constructor

• A constructor that receives a string argument

• A constructor that takes a string argument and an Exception argument

Page 21: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline21

7 // NegativeNumberException represents exceptions caused by8 // illegal operations performed on negative numbers

9 class NegativeNumberException : ApplicationException10 {11 // default constructor

12 public NegativeNumberException()13 : base( "Illegal operation for a negative number" )14 {15 }16 17 // constructor for customizing error message

18 public NegativeNumberException( string message )19 : base( message )20 {21 }22 23 // constructor for customizing error message and 24 // specifying inner exception object

25 public NegativeNumberException( 26 string message, Exception inner ) 27 : base( message, inner )28 {29 }30 31 } // end class NegativeNumberException

This represent the default constructor

This is a constructor that takes in a string argument

This is a constructor that takes in a string argument and an Exception argument

Page 22: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline22

40 // computes the square root of its parameter; throws41 // NegativeNumberException if parameter is negative42 public double SquareRoot( double operand )43 {44 // if negative operand, throw NegativeNumberException45 if ( operand < 0 )

46 throw new NegativeNumberException( 47 "Square root of negative number not permitted" );48 49 // compute the square root50 return Math.Sqrt( operand );51 52 } // end class SquareRoot53 54 // obtain user input, convert to double and calculate55 // square root56 private void squareRootButton_Click(57 object sender, System.EventArgs e )58 {59 outputLabel.Text = "";60 61 // catch any NegativeNumberExceptions thrown

62 try63 {64 double result =

65 SquareRoot( Double.Parse( inputTextBox.Text ) );66 67 outputLabel.Text = result.ToString();68 }

SquareRoot throws a NegativeNumberException

Try block invoke SquareRoot

A FormatException occurs if not a valid number from user

Page 23: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline23

70 // process invalid number format

71 catch ( FormatException notInteger )72 {73 MessageBox.Show( notInteger.Message,

74 "Invalid Operation", MessageBoxButtons.OK, 75 MessageBoxIcon.Error );76 }77 78 // display MessageBox if negative number input

79 catch ( NegativeNumberException error )80 {

81 MessageBox.Show( error.Message, "Invalid Operation",82 MessageBoxButtons.OK, MessageBoxIcon.Error );83 }84 85 } // end method squareRootButton_Click 87 } // end class SquareRootTest

Process the exception caused by FormatException

Catch handler takes care of the NegativeNumberException

Output showing correct function

When attempting to take a negative square root

Page 24: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall. All rights reserved.

24

Handling Overflows with Operators checked and unchecked

• Calculation that could overflow– Use a checked context when performing calculations that

can result in overflow• Programmer should define exception handlers to process the

overflow

– In .NET, primitive data types are stored in fixed-size structure

• Example, maximum for int is 2,147,483,647

– Overflow causes program to produce incorrect result

– C# provides operators checked and unchecked to specify the validity of integer arithmetic.

Page 25: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall. All rights reserved.

25

Handling Overflows with Operators checked and unchecked

• Checked context– The CLR throws an overflowException if overflow occurs

during calculation

• Unchecked context– The result of the overflow is truncated

• Explicit conversions between integral data types can cause overflow

Page 26: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline26

Overflow.cs

4 using System;5 6 // demonstrates using the checked and unchecked operators7 class Overflow8 {9 static void Main( string[] args )10 {

11 int number1 = Int32.MaxValue; // 2,147,483,64712 int number2 = Int32.MaxValue; // 2,147,483,64713 int sum = 0;14 15 Console.WriteLine( 16 "number1: {0}\nnumber2: {1}", number1, number2 );17 18 // calculate sum of number1 and number219 try20 {21 Console.WriteLine( 22 "\nSum integers in checked context:" );23

24 sum = checked( number1 + number2 );25 }26 27 // catch overflow exception

28 catch ( OverflowException overflowException )29 {

30 Console.WriteLine( overflowException.ToString() );31 }32 33 Console.WriteLine( 34 "\nsum after checked operation: {0}", sum );

Initialize and declare variables and assigned value to the maximum of int

Sum adds number1 and number2 in a checked context

Number1 and Number2 together causes an overflow, causes overflowException

The catch handler gets the overflowException and prints out its string representation

Page 27: 2002 Prentice Hall. All rights reserved. 1 Exception Handling Overview Exception handling –Enable clear, robust and more fault-tolerant programs –Process.

2002 Prentice Hall.All rights reserved.

Outline27

36 Console.WriteLine( 37 "\nSum integers in unchecked context:" );38

39 sum = unchecked( number1 + number2 );40 41 Console.WriteLine( 42 "sum after unchecked operation: {0}", sum );43 44 } // end method Main45 46 } // end class Overflow

number1: 2147483647number2: 2147483647 Sum integers in checked context:System.OverflowException: Arithmetic operation resulted in an overflow. at Overflow.Overflow.Main(String[] args) in f:\books\2001\csphtp1\csphtp1_examples\ch11\fig11_09\ overflow\overflow.cs:line 24 sum after checked operation: 0 Sum integers in unchecked context:sum after unchecked operation: -2

Addition of number1 and number2 in unchecked context

Sum of the numbers in an unchecked context