Exceptions

Exceptions

• Exception: error that occurs while a program is running
    • Usually causes program to abruptly halt
• Traceback: error message that gives information regarding line numbers that caused the exception
    • Indicates the type of exception and brief description of the error that caused exception to be raised

Exception handler: code that responds when exceptions are raised and prevents program from crashing
In Python, written as try/except statement
    General format:
        try:
            statements
        except exceptionName:
            statements

• Many exceptions can be prevented by careful coding
    • Example: input validation
    • Usually involve a simple decision construct
• Some exceptions cannot be avoided by careful coding
    • Examples
        • Trying to convert non-numeric string to an integer
        • Trying to open for reading a file that doesn't exist

• If statement in try suite raises exception:
    • Exception specified in except clause:
        • Handler immediately following except clause executes
        • Continue program after try/except statement
    • Other exceptions:
        • Program halts with traceback error message
        • Trying to open for reading a file that doesn't exist
• If no exception is raised, handlers are skipped

HANDLING MULTIPLE EXCEPTIONS

• Often code in try suite can throw more than one type of exception
    • Need to write except clause for each type of exception that needs to be handled
• An except clause that does not list a specific exception will handle any exception that is raised in the try suite
    • Should always be last in a series of except clauses
        • Program halts with traceback error message
        • Trying to open for reading a file that doesn't exist
• If no exception is raised, handlers are skipped

DISPLAYING AN EXCEPTION'S DEFAULT ERROR MESSAGE

• Exception object: object created in memory when an exception is thrown
    • Usually contains default error message pertaining to the exception
• An except clause that does not list a specific exception will handle any exception that is raised in the try suite
    • Can assign the exception object to a variable in an except clause
        • Example: except ValueError as err:
    • Can pass exception object variable to print function to display the default error message

THE ELSE CLAUSE

try/except statement may include an optional else clause, which appears after all the except clauses
    • Aligned with try and except clauses
    • Syntax similar to else clause in decision structure
   •Else suite: block of statements executed after statements in try suite, only if no exceptions were raised
        • If exception was raised, the else suite is skipped

THE FINALLY CLAUSE

• try/except statement may include an optional finally clause, which appears after all the except clauses
    • Aligned with try and except clauses
    • General format:
        finally:
            statements
    • Finally suite: block of statements after the finally clause
        • Execute whether an exception occurs or not
        • Purpose is to perform cleanup before exiting

WHAT IF AN EXCEPTION IS NOT HANDLED?

Two ways for exception to go unhandled:
    • No except clause specifying exception of the right type
    • Exception raised outside a try suite
In both cases, exception will cause the program to halt
    • Python documentation provides information about exceptions that can be raised by different functions