Re: [SQLObject] Bool value of SelectResult
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: michelts <mic...@gm...> - 2006-09-26 14:08:56
|
No :), go ahead! 2006/9/26, Oleg Broytmann <ph...@ph...>: > Hello! I am going to return to this discussion. I'd like to raise an > exception in __nonzero__(). Any argument against this? > > On Fri, May 19, 2006 at 12:41:11PM -0500, Ian Bicking wrote: > > Oleg Broytmann wrote: > > >On Fri, May 19, 2006 at 10:12:23AM -0500, Ian Bicking wrote: > > > > > >>It inherits __nonzero__ already (so SelectResults are always true), but > > >>does not implement __len__. Like I said, I really dislike those very > > >>few instances where you might encounter objects you can't test an object > > >>for truth, so I'm not very positive about that resolution. But I don't > > >>know, that's really the only way to keep people from introducing bugs > > >>into their code, since it's so natural (but probably incorrect) to test > > >>a SelectResult for truthfulness. > > > > > > > > > We have to choose among the following possibilities: > > > > > >1) implement __nonzero__() via count() and warn users that it's slow; > > >2) completely forbid __nonzero__() by raising an exception; > > >3) allow users to choose; write some classes that a user use to choose the > > > desired behavior. > > > > 1) No one will see our warning, unless we actually make it a warning, > > which is annoying and might as well be an exception IMHO. > > > > 2) Also annoying. You have to do more explicit tests then, like "is > > None" to avoid triggering __nonzero__. > > > > 3) I hate choice, then no one knows what someone else's code is going to > > be doing, help is harder to provide, etc. > > > > > > I'm leaning toward 2, like: > > > > def __nonzero__(self): > > raise NotImplementedError( > > "To test if a SelectResult will produce any items, use > > list(result) or result.count()") > > > > > > I'm not sure if it's a big backward compatibility problem, as I suspect > > it will reveal as many bugs as it does correct code that won't work. > > The only nuisance will be a place where people expect None, 0, and/or > > other false items, and are using the current behavior to distinguish > > those from SelectResult. That seems uncommon. If they just expect > > None, replace it with "is None". If they expect None or empty > > containers (like []), then treating SelectResult like a boolean is > > probably an outstanding bug. > > > > > > -- > > Ian Bicking / ia...@co... / http://blog.ianbicking.org > Oleg. > -- > Oleg Broytmann http://phd.pp.ru/ ph...@ph... > Programmers don't die, they just GOSUB without RETURN. > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys -- and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > sqlobject-discuss mailing list > sql...@li... > https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss > -- Michel Thadeu Sabchuk Curitiba - Brasil |