[Python-Dev] Iterating over objects of unknown length

Phillip J. Eby pje at telecommunity.com
Wed Sep 26 18:33:33 CEST 2007


At 07:24 PM 9/26/2007 +0400, Oleg Broytmann wrote:
>Hello!
>
>    (This seems like a "developing with Python" question and partially it is
>but please read on.)
>
>    I have a class that represents SQL queries. Instances of the class can
>be iterated over. As an SQL query doesn't know in advance if it will
>produce any row the class doesn't implement __len__(). Moreover, users of
>the class sometimes write
>
>if sqlQuery:
>    for row in sqlQuery: ...
>else:
>    # no rows

This isn't consistent with iterators; e.g.:

 >>> x=iter([])
 >>> if x: print "yes"
...
yes

ISTM that you should be returning "True" from __nonzero__, since you 
don't implement len().


>1. Should I consider this a bug in the logging module (and other libraries)
>    and submit patches?
>2. Or should I stop raising exceptions in __nonzero__()?

#2 - Python objects should always be __nonzero__, unless they are 
empty containers, zeros, or otherwise specifically False.  It's 
reasonable for libraries to expect that truth-testing an object is always safe.



More information about the Python-Dev mailing list