Hwy doesn't len(None) return zero ?

Gary Herron gherron at islandtraining.com
Wed Jun 30 14:56:39 EDT 2010


On 06/30/2010 11:39 AM, Stef Mientki wrote:
> hello,
>
> I've lot of functions that returns their result in some kind of tuple 
> / list / array,
> and if there is no result, these functions return None.
> Now I'm often what to do something if I've more than 1 element in the 
> result.
> So I test:
>
>    if len ( Result ) > 1 :
>
> But to prevent exceptions, i've to write ( I often forget)
>     if Result and ( len ( Result ) > 1 ) :
>
> So I wonder why len is not allowed on None
> and if there are objections to extend the len function .
>
> thanks,
> Stef Mientki


Because the natural interpretation of len only makes sense for concepts 
such as a container or collection.  The value None is no such thing.  
Assigning a meaning to len(None) begs the question of meanings for 
len(True), len(False), len(3.14), len(sys), ...   This is a slippery 
slope, best avoided.

But there are solutions:

1. Have your functions return [] or () or whatever.    If they are to 
return a list, and the list may be empty, [] is correct.

2.  If you insist on a function returning a list sometimes and other 
values at other times (such as None), then be prepared to write your 
code which uses the result with test to determine which type was 
returned.  Fortunately  that's not hard, as your one example shows.

3.  Create a test function Empty(Result) which does what you want 
returning a boolean and write your tests as:
     if Empty(Result): ...

Gary Herron





-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20100630/b11b8225/attachment-0001.html>


More information about the Python-list mailing list