Bird
Raised Fist0
Pythonprogramming~10 mins

Best practices for custom exceptions 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 define a custom exception class named MyError.

Python
class MyError([1]):
    pass
Drag options to blanks, or click blank then click option'
ACustomError
BError
CBaseException
DException
Attempts:
3 left
💡 Hint
Common Mistakes
Inheriting from BaseException causes catching issues.
Using a non-existent base class.
2fill in blank
medium

Complete the code to raise the custom exception MyError with a message.

Python
raise MyError([1])
Drag options to blanks, or click blank then click option'
AMyError
BError
C"An error occurred"
DException
Attempts:
3 left
💡 Hint
Common Mistakes
Passing the exception class instead of a message.
Not passing any argument.
3fill in blank
hard

Fix the error in the custom exception class to properly initialize the message.

Python
class MyError(Exception):
    def __init__(self, message):
        [1]
Drag options to blanks, or click blank then click option'
Asuper().__init__(message)
Bself.message = message
CException.__init__(self)
Dself.msg = message
Attempts:
3 left
💡 Hint
Common Mistakes
Only setting an attribute without calling the base constructor.
Calling base constructor without message.
4fill in blank
hard

Fill both blanks to create a custom exception with a code attribute and proper initialization.

Python
class MyError(Exception):
    def __init__(self, message, code):
        [1]
        [2] = code
Drag options to blanks, or click blank then click option'
Asuper().__init__(message)
Bself.message
Cself.code
DException.__init__(self, message)
Attempts:
3 left
💡 Hint
Common Mistakes
Not calling the base class __init__.
Assigning code to a wrong attribute name.
5fill in blank
hard

Fill all three blanks to catch the custom exception and print its message and code.

Python
try:
    raise MyError("Failed", 404)
except [1] as e:
    print(e[2])
    print(e[3])
Drag options to blanks, or click blank then click option'
AMyError
B.args[0]
C.code
DException
Attempts:
3 left
💡 Hint
Common Mistakes
Catching the wrong exception type.
Trying to print message directly without args.
Accessing a non-existent attribute.

Practice

(1/5)
1. Why is it a good practice to create custom exceptions in Python?
easy
A. To make error handling clearer and more specific
B. To avoid using try-except blocks
C. To speed up the program execution
D. To replace all built-in exceptions

Solution

  1. Step 1: Understand the purpose of custom exceptions

    Custom exceptions help programmers identify and handle specific errors clearly.
  2. Step 2: Compare with other options

    Options B, C, and D are incorrect because custom exceptions do not avoid try-except, speed execution, or replace built-ins.
  3. Final Answer:

    To make error handling clearer and more specific -> Option A
  4. Quick Check:

    Custom exceptions clarify errors = A [OK]
Hint: Custom exceptions clarify specific errors [OK]
Common Mistakes:
  • Thinking custom exceptions speed up code
  • Believing they replace built-in exceptions
  • Assuming they remove need for try-except
2. Which of the following is the correct way to define a custom exception in Python?
easy
A. class MyError(Exception): pass
B. def MyError(): pass
C. class MyError: pass
D. exception MyError(Exception): pass

Solution

  1. Step 1: Check Python syntax for custom exceptions

    Custom exceptions must be classes inheriting from Exception or its subclasses.
  2. Step 2: Evaluate each option

    A defines a class without inheritance, B defines a function, D uses invalid keyword. Only C ('class MyError(Exception): pass') correctly defines a custom exception.
  3. Final Answer:

    class MyError(Exception): pass -> Option A
  4. Quick Check:

    Custom exceptions are classes inheriting Exception = C [OK]
Hint: Custom exceptions are classes inheriting Exception [OK]
Common Mistakes:
  • Defining exceptions as functions
  • Not inheriting from Exception
  • Using invalid keywords like 'exception'
3. What will be the output of this code?
class MyError(Exception):
    pass

try:
    raise MyError('Oops!')
except MyError as e:
    print(e)
medium
A. No output
B. MyError
C. Exception
D. Oops!

Solution

  1. Step 1: Understand the raise statement

    The code raises MyError with message 'Oops!'.
  2. Step 2: Check the except block output

    The except block catches MyError as e and prints e, which is the message 'Oops!'.
  3. Final Answer:

    Oops! -> Option D
  4. Quick Check:

    Exception message prints = A [OK]
Hint: Exception message prints when caught and printed [OK]
Common Mistakes:
  • Printing exception class name instead of message
  • Expecting no output
  • Confusing exception type with message
4. Identify the error in this custom exception definition:
class CustomError:
    def __init__(self, message):
        self.message = message

raise CustomError('Error occurred')
medium
A. No __str__ method to display message
B. CustomError does not inherit from Exception
C. Message attribute should be named 'msg'
D. Missing parentheses in raise statement

Solution

  1. Step 1: Check inheritance of CustomError

    CustomError does not inherit from Exception, so it is not a proper exception class.
  2. Step 2: Analyze other options

    Raise syntax is correct, attribute name is flexible, __str__ is optional but recommended.
  3. Final Answer:

    CustomError does not inherit from Exception -> Option B
  4. Quick Check:

    Custom exceptions must inherit Exception = D [OK]
Hint: Always inherit Exception for custom exceptions [OK]
Common Mistakes:
  • Forgetting to inherit from Exception
  • Assuming attribute names must be fixed
  • Thinking __str__ is mandatory
5. You want to create a custom exception that stores an error code and a message. Which is the best practice to implement it?
hard
A. class ErrorCodeException(Exception): def __init__(self, code, message): self.code = code self.message = message
B. class ErrorCodeException: def __init__(self, code, message): self.code = code self.message = message
C. class ErrorCodeException(Exception): def __init__(self, code, message): super().__init__(message) self.code = code
D. class ErrorCodeException(Exception): pass

Solution

  1. Step 1: Check inheritance and initialization

    class ErrorCodeException(Exception): def __init__(self, code, message): super().__init__(message) self.code = code inherits Exception and calls super().__init__(message) to set the message properly.
  2. Step 2: Compare with other options

    class ErrorCodeException(Exception): def __init__(self, code, message): self.code = code self.message = message does not call super().__init__, so message may not behave like a normal exception message. class ErrorCodeException: def __init__(self, code, message): self.code = code self.message = message lacks inheritance. class ErrorCodeException(Exception): pass has no code or message storage.
  3. Final Answer:

    class ErrorCodeException(Exception): def __init__(self, code, message): super().__init__(message) self.code = code -> Option C
  4. Quick Check:

    Inherit Exception and call super() with message = B [OK]
Hint: Call super().__init__(message) to set exception message [OK]
Common Mistakes:
  • Not calling super().__init__ for message
  • Not inheriting from Exception
  • Storing message without Exception support