who is simpler? try/except/else or try/except

Peter Otten __peter__ at web.de
Sun Aug 12 14:06:23 EDT 2007


Fabio Z Tessitore wrote:

> reading Dive Into Python, on Chapter 6 (exception), I've found:
> 
> "This code comes from the getpass module, a wrapper module for getting a 
> password from the user"

>                 try:
>                         from EasyDialogs import AskPassword
>                 except ImportError:
>                         getpass = default_getpass
>                 else:
>                         getpass = AskPassword

> Knowing that this code is very simple, my question is about simplicity. I 
> think it is simpler the following code. I haven't a long experience on 
> Python, so I'd like to know your opinions about.

> 
>                 try:
>                         from EasyDialogs import AskPassword
>                         getpass = AskPassword
>                 except ImportError:
>                         getpass = default_getpass

I think you are asking the wrong question.  The difference between these two
functionally equivalent snippets is in expressiveness rather than
simplicity.

The first can be read as

try:
    <operation that may fail>
except <Error I can handle>:
   <fix it>
else:
    <build on successful operation>

When you move the else suite into the try...except

try:
    <operation that may fail>
    <build on successful operation> #
except <Error I can handle>:
   <fix it>

you blur the difference between <operation that may fail> and <build on
successful operation> while at the same time introducing the implicit
constraint that the latter does not fail with <Error I can handle>. 
Therefore the original code gives the reader a much clearer notion of the
author's intention.  This may not be a problem for the simple code at hand
but is definitely a bad habit to get into. 

Peter




More information about the Python-list mailing list