Книга: C# 2008 Programmer
Handling Multiple Exceptions
Handling Multiple Exceptions
To handle different types of exceptions, you can have one or more catch
blocks in the try-catch
statement. The following example shows how you can catch three different exceptions:
? DivideByZeroException
— Thrown when there is an attempt to divide an integral or decimal value by zero.
? FormatException
— Thrown when the format of an argument does not meet the parameter specifications of the invoked method.
? Exception
— Represents errors that occur during application execution.
This example handles the three different exceptions and then prints out a custom error message:
static void Main(string[] args) {
int num1, num2, result;
try {
Console.Write("Please enter the first number:");
num1 = int.Parse(Console.ReadLine());
Console.Write("Please enter the second number:");
num2 = int.Parse(Console.ReadLine());
result = num1 / num2;
Console.WriteLine("The result of {0}/{1} is {2}", num1, num2, result);
} catch (DivideByZeroException ex) {
Console.WriteLine("Division by zero error.");
} catch (FormatException ex) {
Console.WriteLine("Input error.");
} catch (Exception ex) {
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
In this program, typing in a numeric value for num1
and an alphabetic character for num2
produces the FormatException
exception, which is caught and displayed like this?
Please enter the first number:6
Please enter the second number:a
Input error.
Entering 0 for the second number throws the DivideByZeroException
exception, which is caught and displays a different error message:
Please enter the first number:7
Please enter the second number:0
Division by zero error.
So far, all the statements are located in the Main()
function. What happens if you have a function called PerformDivision()
that divides the two numbers and returns the result, like this?
class Program {
static void Main(string[] args) {
int num1, num2;
try {
Console.Write("Please enter the first number:");
num1 = int.Parse(Console.ReadLine());
Console.Write("Please enter the second number:");
num2 = int.Parse(Console.ReadLine());
Program myApp = new Program();
Console.WriteLine("The result of {0}/{1} is {2}", num1, num2,
myApp.PerformDivision(num1, num2));
} catch (DivideByZeroException ex) {
Console.WriteLine("Division by zero error.");
} catch (FormatException ex) {
Console.WriteLine("Input error.");
} catch (Exception ex) {
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
private int PerformDivision(int num1, int num2) {
return num1 / num2;
}
}
If num2
is zero, an exception is raised within the PerformDivision()
function. You can either catch the exception in the PerformDivision()
function or catch the exception in the calling function — Main()
in this case. When an exception is raised within the PerformDivision()
function, the system searches the function to see if there is any catch
block for the exception. If none is found, the exception is passed up the call stack and handled by the calling function. If there is no try-catch
block in the calling function, the exception continues to be passed up the call stack again until it is handled. If no more frames exist in the call stack, the default exception handler handles the exception and your program has a runtime error.
- Handling Exceptions
- Rethrowing Exceptions
- Exception Handling
- CHAPTER 21 Handling Electronic Mail
- Multiple Inheritance
- Handling HTML Forms
- Multiple Terminals
- Multiple Associative Container
- 15.4. Debugging Multiple Tasks
- 15.4.1. Debugging Multiple Processes
- PROJECT 6.6 — Two-Digit Multiplexed 7-Segment LED
- PROJECT 6.7 — Two-Digit Multiplexed 7-Segment LED Counter with Timer Interrupt