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

example
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;
}
  1. numerator ← 12, denominator ← 3

    11int main() {12    int numerator→ 12 = 12; //@numerator=9, 2013    int denominator→ 3 = 3; //@denominator=0, 5
  2. try

    15try {16    int result = safeDivide(numerator12, denominator3);17    std::cout << "result=" << result << std::endl;
  3. 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}
  4. 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=4
  5. std::cout << "done=1" << std::endl;

    22    std::cout << "done=1" << std::endl;23    return 0;24}
    outputdone=1
  1. numerator ← 9, denominator ← 3

    11int main() {12    int numerator→ 9 = 9;13    int denominator→ 3 = 3;
  2. try

    15try {16    int result = safeDivide(numerator9, denominator3);17    std::cout << "result=" << result << std::endl;
  3. 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}
  4. 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=3
  5. std::cout << "done=1" << std::endl;

    22    std::cout << "done=1" << std::endl;23    return 0;24}
    outputdone=1
  1. numerator ← 20, denominator ← 3

    11int main() {12    int numerator→ 20 = 20;13    int denominator→ 3 = 3;
  2. try

    15try {16    int result = safeDivide(numerator20, denominator3);17    std::cout << "result=" << result << std::endl;
  3. 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}
  4. 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=6
  5. std::cout << "done=1" << std::endl;

    22    std::cout << "done=1" << std::endl;23    return 0;24}
    outputdone=1
  1. numerator ← 12, denominator ← 0

    11int main() {12    int numerator→ 12 = 12;13    int denominator→ 0 = 0;
  2. try

    15try {16    int result = safeDivide(numerator12, denominator0);17    std::cout << "result=" << result << std::endl;
  3. int safeDivide(int numerator, int denominator)

    4int safeDivide(int numerator12, int denominator0) {5    if (denominator == 0) {
  4. if (denominator == 0)

    4int safeDivide(int numerator, int denominator) {5    if (denominator0 == 0) {6        throw std::runtime_error("divide by zero");7    }
  5. 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=division
  6. std::cout << "done=1" << std::endl;

    22    std::cout << "done=1" << std::endl;23    return 0;24}
    outputdone=1
  1. numerator ← 12, denominator ← 5

    11int main() {12    int numerator→ 12 = 12;13    int denominator→ 5 = 5;
  2. try

    15try {16    int result = safeDivide(numerator12, denominator5);17    std::cout << "result=" << result << std::endl;
  3. 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}
  4. 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=2
  5. std::cout << "done=1" << std::endl;

    22    std::cout << "done=1" << std::endl;23    return 0;24}
    outputdone=1