Sometimes, you want to make your own special errors to explain problems clearly in your program.
Creating exception classes in Python
Start learning this pattern below
Jump into concepts and practice - no test required
class MyError(Exception): pass
You create a new error by making a class that uses Exception as its base.
The pass means the new error acts like a normal error unless you add more code.
MyError.class MyError(Exception): pass
class ValueTooSmallError(Exception): def __init__(self, message): self.message = message def __str__(self): return f"ValueTooSmallError: {self.message}"
class NegativeNumberError(Exception): def __init__(self, number): self.number = number def __str__(self): return f"NegativeNumberError: {self.number} is not allowed"
This program makes a new error called MyError. It checks if a number is negative. If yes, it raises the error with a message. The try block runs the check. If the error happens, the except block catches it and prints the message.
class MyError(Exception): pass def check_number(x): if x < 0: raise MyError("Negative numbers are not allowed") else: print(f"{x} is okay") try: check_number(5) check_number(-3) except MyError as e: print(f"Caught an error: {e}")
You can add extra details to your error by adding methods or properties.
Use raise to create your error when a problem happens.
Catch your error with except YourErrorName as e to handle it nicely.
Create your own errors by making classes that inherit from Exception.
Use raise to trigger your custom error when needed.
Catch and handle your custom errors with try-except blocks.
Practice
Solution
Step 1: Understand how to define a class inheriting Exception
Custom exceptions must inherit from the built-in Exception class to behave like errors.Step 2: Check syntax correctness
class MyError(Exception): pass correctly defines a class named MyError inheriting from Exception with pass inside.Final Answer:
class MyError(Exception): pass -> Option CQuick Check:
Custom exception class = class MyError(Exception): pass [OK]
- Not inheriting from Exception
- Using def instead of class
- Wrong keyword like 'exception' instead of 'class'
MyError?Solution
Step 1: Recall the Python keyword to raise exceptions
Python uses the keyword 'raise' to trigger exceptions, not 'throw'.Step 2: Check the syntax for raising a custom exception
Correct syntax is 'raise MyError()' to create and raise the exception instance.Final Answer:
raise MyError() -> Option AQuick Check:
Raise custom error = raise MyError() [OK]
- Using 'throw' instead of 'raise'
- Adding 'new' keyword like in other languages
- Not calling the exception as a function
class MyError(Exception):
pass
try:
raise MyError("Oops!")
except MyError as e:
print(e)Solution
Step 1: Understand the raise statement with message
The code raises MyError with the message 'Oops!'.Step 2: Catch the exception and print its message
The except block catches MyError as 'e' and prints 'e', which outputs the message 'Oops!'.Final Answer:
Oops! -> Option AQuick Check:
Exception message prints = Oops! [OK]
- Printing exception class name instead of message
- Not catching the exception properly
- Expecting no output
class MyError(Exception):
pass
try:
raise MyError
except MyError:
print("Caught error")Solution
Step 1: Check how the exception is raised
In Python, it is valid to raise an exception class without parentheses if it has no __init__ arguments.Step 2: Identify the problem in the code
The code uses 'raise MyError' without parentheses, which is valid and does not raise an error.Final Answer:
No error, code runs fine -> Option BQuick Check:
Raising exception class without parentheses is allowed [OK]
- Omitting parentheses after exception name
- Mismatching exception names in except block
- Incorrect class syntax
ValidationError that stores an error code along with the message. Which code correctly implements this?Solution
Step 1: Understand how to extend Exception with extra attributes
To add an error code, override __init__ and call super().__init__(message) to set the message properly.Step 2: Check which option correctly calls super().__init__ and stores code
class ValidationError(Exception): def __init__(self, message, code): super().__init__(message) self.code = code calls super().__init__(message) and assigns self.code = code, correctly storing both.Final Answer:
class ValidationError(Exception): def __init__(self, message, code): super().__init__(message) self.code = code -> Option DQuick Check:
Call super().__init__(message) and store extra attributes [OK]
- Not calling super().__init__ for message
- Assigning message without super call
- Missing code attribute assignment
