A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://mail.python.org/pipermail/python-list/2005-September/320471.html below:

which is more 'pythonic' / 'better' ?

which is more 'pythonic' / 'better' ?Pierre Barbier de Reuille pierre.barbier at cirad.fr
Mon Sep 12 09:17:05 EDT 2005
Will McGugan a écrit :
> gabor wrote:
> 
>> hi,
>>
>> there are 2 versions of a simple code.
>> which is preferred?
>>
>>
>> ===
>> if len(line) >= (n+1):
>>     text = line[n]
>> else:
>>     text = 'nothing'
>> ===
>>
>>
>> ===
>> try:
>>     text = line[n]
>> except IndexError:
>>     text = 'nothing'
>> ===
>>
>>
>> which is the one you would use?
> 
> 
> I would actualy use the following for this particular case..
> 
> text = line[n:n+1] or 'nothing'

... and you would get either a list of one element or a string ...
I think you wanted to write :

text = (line[n:n+1] or ['nothing'])[0]

However, I wouldn't use that because it is hard to read ... you have to
know Python in great detail to know that:

 1 - is the expressions "line[i:j]", i and j are replaced with
"len(line)" if they are greater than "len(line)"
 2 - so if n > len(line), then line[n:n+1]" == len[len(line):len(line)]
== []
(it is not evident that line[n:n+1] can give an empty list ...)
 3 - empty list evaluate to "False"
 4 - the "or" operator returns the first argument evaluating to "true"

So, in the end, you use 3 side-effects of Python in the same small
expression ... (1, 2 and 4)

> 
> But in general I think it is best to use exceptions like that only where
>  you expect the code to _not_ throw the exception the majority of times.
> Otherwise the simple condition is better. Although I expect there is not
> much difference either way..
> 
> 
> Will McGugan
> -- 
> http://www.kelpiesoft.com

What I would do is the following:
 - if this happen in a loop, I would, if possible, remove any test and
catch the exception outside the loop !
 - otherwise, I would go for the test, as it is more straitforward to read.

Pierre

More information about the Python-list mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4