catching exceptions from an except: block

garrickp at garrickp at
Wed Mar 7 23:04:25 CET 2007

On Mar 7, 2:48 pm, "Arnaud Delobelle" <arno... at> wrote:
> I'm not really thinking about this situation so let me clarify. Here
> is a simple concrete example, taking the following for the functions
> a,b,c I mention in my original post.
>   - a=int
>   - b=float
>   - c=complex
>   - x is a string
> This means I want to convert x to an int if possible, otherwise a
> float, otherwise a complex, otherwise raise CantDoIt.
> I can do:
> for f in int, float, complex:
>     try:
>         return f(x)
>     except ValueError:
>         continue
> raise CantDoIt
> But if the three things I want to do are not callable objects but
> chunks of code this method is awkward because you have to create
> functions simply in order to be able to loop over them (this is whay I
> was talking about 'abusing loop constructs').  Besides I am not happy
> with the other two idioms I can think of.
> --
> Arnaud

Wouldn't it be easier to do:

if isinstance(x, int):
    # do something
elif isinstance(x, float)t:
    # do something
elif isinstance(x, complex):
    # do something
    raise CantDoIt


i = [int, float, complex]
for f in i:
    if isinstance(x, f):
        return x
    raise CantDoIt

More information about the Python-list mailing list