Where to put the error handing test?

Paul Miller paul.w.miller.please.dont.spam.me at wmich.edu
Tue Nov 24 10:31:28 CET 2009

On Mon, 23 Nov 2009 22:27:24 -0800, alex23 wrote:

> As a very rough example:
>     def g(x):
>         try:
>             assert isinstance(x, int)
>         except AssertionError:
>             raise TypeError, "excepted int, got %s" % type(x)
>         # ... function code goes here
>     def f(x):
>         try:
>             g(x)
>         except TypeError:
>             # handle the problem here
>         # ... function code goes here

I know you say this is a "very rough" example, but, generally you don't 
want to do this kind of "type checking" with isinstance.  Rather, it's 
better to just simply manipulate x as if it were an integer and rely on 
Python to check to see if x supports the operations you're trying to do 
with it.  For instance, say we have

def g(x):
    return x * x

def f(x):
    return g(x) + 2

If you try to pass any value to either of these functions that doesn't 
support the required operations, Python itself will complain with a 
TypeError.  Since the interpreter needs to do this check *anyway*, 
there's no real sense in repeating it manually by checking isinstance.

More information about the Python-list mailing list