Sqoshu
Sqoshu

Reputation: 1004

Best way to handle exceptions in functon args?

I was recently coding a few Python 3.x programs and I wonder what is the best way of handling simple exceptions in python function args. In this example I'm going with checking if inserted value can be converted to int. I've come up with two ways of doing this:

def test_err_try(x, y, z):

    try:
        int(x)
        int(y)
        int(z)
    except ValueError or TypeError:    #try handler
        return 'Bad args.'
    ##code##

or

def test_err_if(x, y, z):

    if type(x) != int or type(y) != int or type(z) != int:    #if handler
        raise ValueError('Bad args.')
    else:
        ##code##

I know that there is a difference in what the handlers are returning - in the first case it's just string 'Bad args.' and in the second it is ValueError exception.
What is the best (or rather simplest and shortest) way? First, second or neither and there is a better one?

Upvotes: 1

Views: 46

Answers (1)

Chris Mueller
Chris Mueller

Reputation: 6680

The answer depends on your use case. If you are building a function which will be exposed to an end user, then the try except block offers more functionality because it will allow any variable which can be converted to an int. In this case I would suggest raising an error rather than having the function return a string:

try:
    x = int(x)
    y = int(y)
    z = int(z)
except ValueError:
    raise TypeError("Input arguments should be convertible to int")

If the function is meant for internal use within your program, then it is best to use the assert statement because its evaluation can be disabled once you are finished debugging your program.

assert type(x) is int
assert type(y) is int
assert type(z) is int

Upvotes: 1

Related Questions