A detailed Guide on User Defined Exception in Python
In this Python tutorial, we will discuss the user-defined exceptions which are also termed as custom exceptions along with certain examples and their types.
1. What is a User-defined Exception in Python?
There is a lot built-in exception like IndexError, IOError, ImportError, ZeroDivisionError, TypeError, etc. But, sometimes it is not enough and we have to create some custom exceptions so that we can handle the errors in a better way and can create more meaningful exceptions.
Read More: Exception Handling in Python
1.1. How to create user-defined Exception?
To create a custom Exception we must create a new class. This exception class has to be derived, directly or indirectly, from the built-in Exception class.
Usually, the defined exception name ends with the word Error which follows the standard naming convention, however, it is not compulsory to do so. If there are some different standards for the project then we should follow them.
The user defines their own exception to fulfill certain purposes and can add more fields and methods(everything that is possible in a class) to make them custom to the requirements and be more expressive.
Let’s create an exception with a small example.
class PowerfulError(Exception):
print("Custom Error")
raise PowerfulErrorOutput
Custom Error
Traceback (most recent call last):
File "error.py", line 4, in
raise PowerfulError
error.PowerfulErrorHere, in the above program, we have defined a user-defined exception with the name PowerfulError inherited from the class Exception. Inside the PowerfulError class, we have written the print statement to check if it is being called.
1.2. How to raise custom Exception with message?
Now, we can use raise keyword to raise the user-defined exception in the same way we do for other in-built exceptions.
We can also pass a certain message in the parenthesis while raising the exception.
class PowerfulError(Exception):
print("Calling Successful")
raise PowerfulError("Error Present")Output
Calling Successful
Traceback (most recent call last):
File "error.py", line 4, in
raise PowerfulError("Error Present")
error.PowerfulError: Error Present2. Customization of Exception with OOP in Python
Just like any other class, a user-defined exception class can be used to perform anything, however, we keep them short and simple. Many users create custom base classes through which they can design other exception classes.
Let’s take an example to understand how this concept works.
# User-defined Exceptions
class BaseError(Exception):
pass # Base Class
class HighValueError(BaseError):
pass # Raise for high input values
class LowValueError(BaseError):
pass # Raise for low input values
presentvalue = 29
while (1):
try:
give_no = int(input("Number please: "))
if give_no > presentvalue:
raise HighValueError
elif give_no < presentvalue:
raise LowValueError
break
except LowValueError:
print("Very low, give input again please")
print()
except HighValueError:
print("Too high, give input again please")
print()
print("Nice! Correct answer.")
Output Number please: 23 Very low, give input again please Number please: 16 Very low, give input again please Number please: 34 Too high, give input again please Number please: 19 Very low, give input again please Number please: 29 Nice! Correct answer.
In the above program, we have created a small game with the help of some user-defined exceptions. The main base class is BaseError class and HighValueError & LowValueError are derived from the base class. We have created the user-defined exceptions appropriately and in a standard way though there are some other possible ways too.
2.1. Benefit of using custom base exception class
Using custom base exception classes enables us to the exceptions into logical entities. It also enables us to handle the errors in an efficient way. For example, in the previous example if we do not want to use HighValueError and LowValueError we can also use just the BaseError class and give a generic message for them. For example –
...
try:
...
except BaseError:
print("Incorrect input, give input again please")
print()
...2.2. Customize messasge in Exception class
Apart from this, there can be certain customization to make the class intake other arguments as well. For customizing different exception classes, we need to have some basic understanding of Object-Oriented Programming(OOP) in python.
class SumError(Exception):
def __init__(self, sum, display="Sum is not even."):
self.sum= sum
self.display= display
super().__init__(self.display)
sum = int(input("Enter any value "))
if not sum//2==0:
raise SumError(sum)Output
Enter any value 43
Traceback (most recent call last):
File "error.py", line 10, in
raise SumError(sum)
error.SumError: Sum is not even.In the above example, the constructor of Exception class has been overridden so that it can intake our custom arguments sum and display. Then, the constructor of the parent Exception class is called manually with the self.display argument using super().
The __str__ method which has been inherited from the Exception class is then used to display the corresponding print statement when SumError occurred.
2.3. How to use standard Exceptions as the base class for user-defined Exceptions?
In python, standard exception refers to the Runtime Error class, if the output error does not belong to any specific category, then this exception is raised.
Given below is a program that indicates how we can take the help of RuntimeError as base class and ClassicError as derived class.
class ClassicError(RuntimeError):
def __init__(self, s):
self.args = s
try:
raise ClassicError("Codingeek!")
except ClassicError as str:
print (str.args)Output
('C', 'o', 'd', 'i', 'n', 'g', 'e', 'e', 'k', '!')3. Conclusion
in this article, we have covered everything about the user-defined exception along with many examples.
- What is a User-defined Exception and how can we create our own user-defined Exceptions along with some examples
- Customization of Exception with OOP and use of standard Exceptions as the base class for user-defined Exceptions along with understandable examples.
Helpful Links
Please follow the Python tutorial series or the menu in the sidebar for the complete tutorial series.
Also for examples in Python and practice please refer to Python Examples.
Complete code samples are present on Github project.
Recommended Books
An investment in knowledge always pays the best interest. I hope you like the tutorial. Do come back for more because learning paves way for a better understanding
Do not forget to share and Subscribe.
Happy coding!! ?