Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > who is simpler? try/except/else or try/except

Reply
Thread Tools

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

 
 
Fabio Z Tessitore
Guest
Posts: n/a
 
      08-12-2007
Hi all,

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:
import termios, TERMIOS
except ImportError:
try:
import msvcrt
except ImportError:
try:
from EasyDialogs import AskPassword
except ImportError:
getpass = default_getpass
else:
getpass = AskPassword
else:
getpass = win_getpass
else:
getpass = unix_getpass

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:
import termios, TERMIOS
getpass = unix_getpass

except ImportError:
try:
import msvcrt
getpass = win_getpass

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

except ImportError:
getpass = default_getpass

thanks,
Fabio
 
Reply With Quote
 
 
 
 
Steve Holden
Guest
Posts: n/a
 
      08-12-2007
Fabio Z Tessitore wrote:
> Hi all,
>
> 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:
> import termios, TERMIOS
> except ImportError:
> try:
> import msvcrt
> except ImportError:
> try:
> from EasyDialogs import AskPassword
> except ImportError:
> getpass = default_getpass
> else:
> getpass = AskPassword
> else:
> getpass = win_getpass
> else:
> getpass = unix_getpass
>
> 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:
> import termios, TERMIOS
> getpass = unix_getpass
>
> except ImportError:
> try:
> import msvcrt
> getpass = win_getpass
>
> except ImportError:
> try:
> from EasyDialogs import AskPassword
> getpass = AskPassword
>
> except ImportError:
> getpass = default_getpass
>

In matters of style such as this there *are* only opinions. I don't
think there are definite grounds for preferring either one.

If you were to propose such a patch on the python-dev list, it would
almost certainly be rejected - not because it is necessarily worse, but
because it would represent a change of style only.

regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
--------------- Asciimercial ------------------
Get on the web: Blog, lens and tag the Internet
Many services currently offer free registration
----------- Thank You for Reading -------------

 
Reply With Quote
 
 
 
 
Fabio Z Tessitore
Guest
Posts: n/a
 
      08-12-2007
Il Sun, 12 Aug 2007 13:49:18 -0400, Steve Holden ha scritto:

>>

> In matters of style such as this there *are* only opinions. I don't
> think there are definite grounds for preferring either one.


Opinions are what I'd like to see, because most of you have bigger
experience than me. maybe this example is too trivial for that ...


> If you were to propose such a patch on the python-dev list,


Oh no, I didn't think that

thanks,

bye
Fabio
 
Reply With Quote
 
Peter Otten
Guest
Posts: n/a
 
      08-12-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

 
Reply With Quote
 
Fabio Z Tessitore
Guest
Posts: n/a
 
      08-12-2007
Il Sun, 12 Aug 2007 20:06:23 +0200, Peter Otten ha scritto:

[cut]
> 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.
>


thanks Peter, that's the kind of opinion I'm interesting to.

bye
Fabio
 
Reply With Quote
 
greg
Guest
Posts: n/a
 
      08-13-2007
Peter Otten wrote:
> 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>


Note that in general the semantics of these are different,
since in the first version the except clause will only catch
exceptions in <operation that may fail>, whereas in the
second it may catch exceptions in <build on successful operation>
as well.

It probably doesn't make a difference in this example, but
there are situations where it can.

--
Greg
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments