Exceptions
Try Catch Basics
try and catch let code handle a problem without ending the program.
try catch
Code inside a `try` block runs normally until an exception is thrown. A matching `catch` block handles the exception.
Try Catch Basics
try_catch_basics.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <stdexcept>
int safeDivide(int numerator, int denominator) {
if (denominator == 0) {
throw std::runtime_error("divide by zero");
}
return numerator / denominator;
}
int main() {
int numerator = 12;
int denominator = 3;
try {
int result = safeDivide(numerator, denominator);
std::cout << "result=" << result << std::endl;
} catch (const std::runtime_error& error) {
std::cout << "error=division" << std::endl;
}
std::cout << "done=1" << std::endl;
return 0;
}
#include <iostream>
#include <stdexcept>
int safeDivide(int numerator, int denominator) {
if (denominator == 0) {
throw std::runtime_error("divide by zero");
}
return numerator / denominator;
}
int main() {
int numerator = 9;
int denominator = 3;
try {
int result = safeDivide(numerator, denominator);
std::cout << "result=" << result << std::endl;
} catch (const std::runtime_error& error) {
std::cout << "error=division" << std::endl;
}
std::cout << "done=1" << std::endl;
return 0;
}
#include <iostream>
#include <stdexcept>
int safeDivide(int numerator, int denominator) {
if (denominator == 0) {
throw std::runtime_error("divide by zero");
}
return numerator / denominator;
}
int main() {
int numerator = 20;
int denominator = 3;
try {
int result = safeDivide(numerator, denominator);
std::cout << "result=" << result << std::endl;
} catch (const std::runtime_error& error) {
std::cout << "error=division" << std::endl;
}
std::cout << "done=1" << std::endl;
return 0;
}
#include <iostream>
#include <stdexcept>
int safeDivide(int numerator, int denominator) {
if (denominator == 0) {
throw std::runtime_error("divide by zero");
}
return numerator / denominator;
}
int main() {
int numerator = 12;
int denominator = 0;
try {
int result = safeDivide(numerator, denominator);
std::cout << "result=" << result << std::endl;
} catch (const std::runtime_error& error) {
std::cout << "error=division" << std::endl;
}
std::cout << "done=1" << std::endl;
return 0;
}
#include <iostream>
#include <stdexcept>
int safeDivide(int numerator, int denominator) {
if (denominator == 0) {
throw std::runtime_error("divide by zero");
}
return numerator / denominator;
}
int main() {
int numerator = 12;
int denominator = 5;
try {
int result = safeDivide(numerator, denominator);
std::cout << "result=" << result << std::endl;
} catch (const std::runtime_error& error) {
std::cout << "error=division" << std::endl;
}
std::cout << "done=1" << std::endl;
return 0;
}
numerator ← 12, denominator ← 3
11int main() {12 int numerator→ 12 = 12; //@numerator=9, 2013 int denominator→ 3 = 3; //@denominator=0, 5try
15try {16 int result = safeDivide(numerator12, denominator3);17 std::cout << "result=" << result << std::endl;int safeDivide(int numerator, int denominator)
4int safeDivide(int numerator12, int denominator3) {5 if (denominator == 0) {6 throw std::runtime_error("divide by zero");7 }8 return numerator12 / denominator3;9}result ← 4
15try {16 int result→ 4 = safeDivide(numerator12, denominator3);17 std::cout << "result=" << result4 << std::endl;18} catch (const std::runtime_error& error) {outputresult=4std::cout << "done=1" << std::endl;
22 std::cout << "done=1" << std::endl;23 return 0;24}outputdone=1
numerator ← 9, denominator ← 3
11int main() {12 int numerator→ 9 = 9;13 int denominator→ 3 = 3;try
15try {16 int result = safeDivide(numerator9, denominator3);17 std::cout << "result=" << result << std::endl;int safeDivide(int numerator, int denominator)
4int safeDivide(int numerator9, int denominator3) {5 if (denominator == 0) {6 throw std::runtime_error("divide by zero");7 }8 return numerator9 / denominator3;9}result ← 3
15try {16 int result→ 3 = safeDivide(numerator9, denominator3);17 std::cout << "result=" << result3 << std::endl;18} catch (const std::runtime_error& error) {outputresult=3std::cout << "done=1" << std::endl;
22 std::cout << "done=1" << std::endl;23 return 0;24}outputdone=1
numerator ← 20, denominator ← 3
11int main() {12 int numerator→ 20 = 20;13 int denominator→ 3 = 3;try
15try {16 int result = safeDivide(numerator20, denominator3);17 std::cout << "result=" << result << std::endl;int safeDivide(int numerator, int denominator)
4int safeDivide(int numerator20, int denominator3) {5 if (denominator == 0) {6 throw std::runtime_error("divide by zero");7 }8 return numerator20 / denominator3;9}result ← 6
15try {16 int result→ 6 = safeDivide(numerator20, denominator3);17 std::cout << "result=" << result6 << std::endl;18} catch (const std::runtime_error& error) {outputresult=6std::cout << "done=1" << std::endl;
22 std::cout << "done=1" << std::endl;23 return 0;24}outputdone=1
numerator ← 12, denominator ← 0
11int main() {12 int numerator→ 12 = 12;13 int denominator→ 0 = 0;try
15try {16 int result = safeDivide(numerator12, denominator0);17 std::cout << "result=" << result << std::endl;int safeDivide(int numerator, int denominator)
4int safeDivide(int numerator12, int denominator0) {5 if (denominator == 0) {if (denominator == 0)
4int safeDivide(int numerator, int denominator) {5 if (denominator0 == 0) {6 throw std::runtime_error("divide by zero");7 }catch (const std::runtime_error& error)
17 std::cout << "result=" << result << std::endl;18} catch (const std::runtime_error& error) {19 std::cout << "error=division" << std::endl;20}outputerror=divisionstd::cout << "done=1" << std::endl;
22 std::cout << "done=1" << std::endl;23 return 0;24}outputdone=1
numerator ← 12, denominator ← 5
11int main() {12 int numerator→ 12 = 12;13 int denominator→ 5 = 5;try
15try {16 int result = safeDivide(numerator12, denominator5);17 std::cout << "result=" << result << std::endl;int safeDivide(int numerator, int denominator)
4int safeDivide(int numerator12, int denominator5) {5 if (denominator == 0) {6 throw std::runtime_error("divide by zero");7 }8 return numerator12 / denominator5;9}result ← 2
15try {16 int result→ 2 = safeDivide(numerator12, denominator5);17 std::cout << "result=" << result2 << std::endl;18} catch (const std::runtime_error& error) {outputresult=2std::cout << "done=1" << std::endl;
22 std::cout << "done=1" << std::endl;23 return 0;24}outputdone=1