try -> except -> else -> except?

David House dmhouse at gmail.com
Mon Jul 6 11:46:45 EDT 2009


Hi all,

I'm looking for some structure advice. I'm writing something that
currently looks like the following:

try:
    <short amount of code that may raise a KeyError>
except KeyError:
    <error handler>
else:
    <nontrivial amount of code>

This is working fine. However, I now want to add a call to a function
in the `else' part that may raise an exception, say a ValueError. So I
was hoping to do something like the following:

try:
    <short amount of code that may raise a KeyError>
except KeyError:
    <error handler>
else:
    <nontrivial amount of code>
except ValueError:
    <error handler>

However, this isn't allowed in Python.

An obvious way round this is to move the `else' clause into the `try', i.e.,

try:
    <short amount of code that may raise a KeyError>
    <nontrivial amount of code>
except KeyError:
    <error handler>
except ValueError:
    <error handler>

However, I am loath to do this, for two reasons:

(i) if I modify the <nontrivial amount of code> block at some point in
the future so that it may raise a KeyError, I have to somehow tell
this exception from the one that may be generated from the <short
amount of code that may raise a KeyError> line.
(ii) it moves the error handler for the <short amount of code that may
raise a KeyError> bit miles away from the line that might generate the
error, making it unclear which code the KeyError error handler is an
error handler for.

What would be the best way to structure this?

-- 
-David



More information about the Python-list mailing list