Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to catch custom exception in Python [duplicate]

I'm using a python library in which at one point an exception is defined as follows:

raise Exception("Key empty")

I now want to be able to catch that specific exception, but I'm not sure how to do that.

I tried the following

try:
    raise Exception('Key empty')
except Exception('Key empty'):
    print 'caught the specific exception'
except Exception:
    print 'caught the general exception'

but that just prints out caught the general exception.

Does anybody know how I can catch that specific Key empty exception? All tips are welcome!

like image 464
kramer65 Avatar asked Aug 17 '17 12:08

kramer65


People also ask

How do you catch and raise the same exception in Python?

A better strategy is to just append your message to the argument of the original exception if possible as in err. args += ("message",) and re-raise the exception message. The traceback might not take you to the line numbers where the exception was caught but it will take you to where the exception occurred for sure.

How does Python handle custom exceptions?

In Python, users can define custom exceptions by creating a new class. This exception class has to be derived, either directly or indirectly, from the built-in Exception class. Most of the built-in exceptions are also derived from this class.

Can you have two excepts in Python?

By handling multiple exceptions, a program can respond to different exceptions without terminating it. In Python, try-except blocks can be used to catch and respond to one or multiple exceptions. In cases where a process raises more than one possible exception, they can all be handled using a single except clause.

How do you catch an instance of a specific exception type in Python?

Catching Exceptions in Python In Python, exceptions can be handled using a try statement. The critical operation which can raise an exception is placed inside the try clause. The code that handles the exceptions is written in the except clause.


1 Answers

Define your exception:

class KeyEmptyException(Exception):
    def __init__(self, message='Key Empty'):
        # Call the base class constructor with the parameters it needs
        super(KeyEmptyException, self).__init__(message)

Use it:

try:
    raise KeyEmptyException()
except KeyEmptyException as e:
    print e

Update: based on the discussion in comment OP posted:

But the lib is not under my control. It's open source, so I can edit it, but I would preferably try to catch it without editing the library. Is that not possible?

say library raises an exception as

# this try is just for demonstration 
try:

    try:
        # call your library code that can raise `Key empty` Exception
        raise Exception('Key empty')
    except Exception as e:
        # if exception occurs, we will check if its 
        # `Key empty` and raise our own exception
        if str(e) == 'Key empty':
            raise KeyEmptyException()
        else:
            # else raise the same exception
            raise e
except Exception as e:
    # we will finally check what exception we are getting
    print('Caught Exception', e)
like image 138
Vikash Singh Avatar answered Nov 12 '22 18:11

Vikash Singh