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 PowerfulError
Output
Custom Error
Traceback (most recent call last):
  File "error.py", line 4, in 
    raise PowerfulError
error.PowerfulError

Here, 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 Present

2. 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.

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!! 😊

Recommended -

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x