Bird
Raised Fist0
Pythonprogramming~10 mins

Exception hierarchy in Python - Interactive Code Practice

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to catch all exceptions using the base exception class.

Python
try:
    x = 1 / 0
except [1]:
    print("Caught an exception")
Drag options to blanks, or click blank then click option'
AZeroDivisionError
BException
CArithmeticError
DBaseException
Attempts:
3 left
💡 Hint
Common Mistakes
Using Exception instead of BaseException catches most but not all exceptions.
Using specific exceptions like ZeroDivisionError won't catch all exceptions.
2fill in blank
medium

Complete the code to catch only errors related to arithmetic operations.

Python
try:
    y = 5 / 0
except [1]:
    print("Arithmetic error caught")
Drag options to blanks, or click blank then click option'
AArithmeticError
BBaseException
CZeroDivisionError
DException
Attempts:
3 left
💡 Hint
Common Mistakes
Using ZeroDivisionError only catches division by zero, not other arithmetic errors.
Using BaseException is too broad.
3fill in blank
hard

Fix the error in the code to catch only division by zero exceptions.

Python
try:
    z = 10 / 0
except [1]:
    print("Division by zero caught")
Drag options to blanks, or click blank then click option'
AException
BArithmeticError
CZeroDivisionError
DBaseException
Attempts:
3 left
💡 Hint
Common Mistakes
Catching Exception or BaseException is too broad.
Using ArithmeticError catches more than just division by zero.
4fill in blank
hard

Fill both blanks to create a custom exception class inheriting from the correct base class.

Python
class MyError([1]):
    def __init__(self, message):
        super().__init__([2])
Drag options to blanks, or click blank then click option'
AException
BBaseException
CZeroDivisionError
Dmessage
Attempts:
3 left
💡 Hint
Common Mistakes
Inheriting from BaseException is not recommended for custom exceptions.
Passing the wrong argument to super().__init__ causes errors.
5fill in blank
hard

Fill all three blanks to catch multiple exceptions in one except block.

Python
try:
    a = int('abc')
    b = 1 / 0
except ([1], [2], [3]):
    print("Caught a value or arithmetic error")
Drag options to blanks, or click blank then click option'
AValueError
BZeroDivisionError
CArithmeticError
DTypeError
Attempts:
3 left
💡 Hint
Common Mistakes
Missing one of the exceptions causes some errors to go uncaught.
Using unrelated exceptions like TypeError will not catch these errors.

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