Bird
Raised Fist0
Pythonprogramming~5 mins

Exception hierarchy in Python - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is the base class for all exceptions in Python?
The base class for all exceptions in Python is <code>BaseException</code>. All other exceptions inherit from it.
Click to reveal answer
beginner
Which class do most user-defined exceptions inherit from?
Most user-defined exceptions inherit from the <code>Exception</code> class, which is a subclass of <code>BaseException</code>.
Click to reveal answer
intermediate
What is the difference between Exception and BaseException?
<code>BaseException</code> is the root of the exception hierarchy. <code>Exception</code> is a subclass used for most errors that programs should catch. Some exceptions like <code>SystemExit</code> and <code>KeyboardInterrupt</code> inherit directly from <code>BaseException</code> and are usually not caught by normal code.
Click to reveal answer
intermediate
Name two exceptions that inherit directly from BaseException and are usually not caught by normal exception handlers.
Two exceptions that inherit directly from BaseException are SystemExit and KeyboardInterrupt. They are used to exit programs or interrupt execution and are usually not caught by normal except Exception blocks.
Click to reveal answer
beginner
How does the exception hierarchy help in writing exception handling code?
The exception hierarchy allows you to catch broad categories of errors by catching a parent class like <code>Exception</code>, or catch specific errors by catching subclasses. This helps write flexible and clear error handling.
Click to reveal answer
Which class is the root of all exceptions in Python?
AError
BException
CStandardError
DBaseException
Which exception is NOT a subclass of Exception?
AValueError
BIndexError
CKeyboardInterrupt
DTypeError
If you want to catch most errors in your program, which class should you catch?
AException
BKeyboardInterrupt
CSystemExit
DBaseException
Which exception is raised when a program is asked to exit?
ASystemExit
BRuntimeError
CValueError
DException
Why should you avoid catching BaseException directly?
AIt does not catch any exceptions.
BIt catches all exceptions including system-exiting ones, which can cause problems.
CIt only catches syntax errors.
DIt is deprecated.
Explain the Python exception hierarchy starting from BaseException.
Think about which exceptions are caught normally and which are special.
You got /4 concepts.
    Why is it important to understand the exception hierarchy when writing try-except blocks?
    Consider how catching a parent class affects what errors you handle.
    You got /4 concepts.

      Practice

      (1/5)
      1. Which of the following is the base class for all built-in exceptions in Python?
      easy
      A. Exception
      B. BaseException
      C. Error
      D. RuntimeError

      Solution

      1. Step 1: Understand Python's exception hierarchy

        All exceptions in Python inherit from BaseException, which is the root of the hierarchy.
      2. Step 2: Identify the base class

        Exception inherits from BaseException, but BaseException is the top-level base class.
      3. Final Answer:

        BaseException -> Option B
      4. Quick Check:

        BaseException is the root of all exceptions [OK]
      Hint: Remember: BaseException is the root of all exceptions [OK]
      Common Mistakes:
      • Confusing Exception with BaseException
      • Thinking Error is a built-in base class
      • Choosing RuntimeError as base
      2. Which of the following is the correct syntax to catch all exceptions except system-exiting ones?
      easy
      A. except SystemExit:
      B. except BaseException:
      C. except Exception:
      D. except RuntimeError:

      Solution

      1. Step 1: Recall exception hierarchy for catching exceptions

        Catching Exception catches most errors but excludes system-exiting exceptions like SystemExit and KeyboardInterrupt.
      2. Step 2: Identify correct syntax

        except Exception: is the standard way to catch all regular exceptions safely.
      3. Final Answer:

        except Exception: -> Option C
      4. Quick Check:

        Use Exception to catch all but system-exiting exceptions [OK]
      Hint: Use except Exception to avoid catching system-exit errors [OK]
      Common Mistakes:
      • Using except BaseException catches system exit too
      • Catching only RuntimeError misses many exceptions
      • Using except SystemExit catches only exit exceptions
      3. What will be the output of this code?
      try:
          x = 1 / 0
      except ArithmeticError:
          print('ArithmeticError caught')
      except ZeroDivisionError:
          print('ZeroDivisionError caught')
      medium
      A. ArithmeticError caught
      B. ZeroDivisionError caught
      C. No output, program crashes
      D. SyntaxError

      Solution

      1. Step 1: Understand exception hierarchy for ZeroDivisionError

        ZeroDivisionError is a subclass of ArithmeticError.
      2. Step 2: Check which except block matches first

        Since ArithmeticError comes before ZeroDivisionError, the first except block catches the exception.
      3. Final Answer:

        ArithmeticError caught -> Option A
      4. Quick Check:

        Parent exception catches before child [OK]
      Hint: Parent exceptions catch before child exceptions in order [OK]
      Common Mistakes:
      • Expecting ZeroDivisionError block to run first
      • Thinking exception order does not matter
      • Assuming program crashes without handling
      4. Find the error in this code snippet:
      try:
          open('file.txt')
      except IOError:
          print('File error')
      except FileNotFoundError:
          print('File not found')
      medium
      A. open() needs a mode argument
      B. IOError should be replaced with Exception
      C. No error, code is correct
      D. FileNotFoundError should come before IOError

      Solution

      1. Step 1: Understand exception hierarchy between IOError and FileNotFoundError

        FileNotFoundError is a subclass of IOError.
      2. Step 2: Check order of except blocks

        The more specific exception (FileNotFoundError) must come before the more general (IOError) to avoid unreachable code.
      3. Final Answer:

        FileNotFoundError should come before IOError -> Option D
      4. Quick Check:

        Specific exceptions must precede general ones [OK]
      Hint: Place child exceptions before parent exceptions in except blocks [OK]
      Common Mistakes:
      • Putting general exceptions before specific ones
      • Assuming IOError and FileNotFoundError are unrelated
      • Thinking open() requires mode argument always
      5. You want to catch all exceptions except KeyboardInterrupt and SystemExit. Which is the best way to write the except block?
      hard
      A. except Exception:
      B. except BaseException:
      C. except (KeyboardInterrupt, SystemExit):
      D. except (Exception, KeyboardInterrupt, SystemExit):

      Solution

      1. Step 1: Recall exception hierarchy for KeyboardInterrupt and SystemExit

        Both KeyboardInterrupt and SystemExit inherit directly from BaseException, not Exception.
      2. Step 2: Choose except block that excludes these exceptions

        except Exception: catches all exceptions except KeyboardInterrupt and SystemExit, which is the desired behavior.
      3. Final Answer:

        except Exception: -> Option A
      4. Quick Check:

        Exception excludes system-exiting exceptions [OK]
      Hint: Use except Exception to exclude system-exiting exceptions [OK]
      Common Mistakes:
      • Using except BaseException catches everything including system exit
      • Catching KeyboardInterrupt and SystemExit explicitly when not needed
      • Combining Exception with KeyboardInterrupt in except tuple