On Thu, 2014-08-07 at 17:41 +0100, Matthew Booth wrote:
> ... or arg is an object which defines __nonzero__(), or defines
> __getattr__() and then explodes because of the unexpected lookup of a
> __nonzero__ attribute. Or it's False (no quotes when printed by the
> debugger), but has a unicode type and therefore evaluates to True[1].

If you're passing such exotic objects as parameters that could
potentially be drawn from configuration instead, maybe that code needs
to be refactored a bit :)

> However, if you want to compare a value with None and write 'foo is
> None' it will always do exactly what you expect, regardless what you
> pass to it. I think it's also nicer to the reviewer and the
> maintainer,
> who then don't need to go looking for context to check if anything
> invalid might be passed in.

In the vast majority of cases, however, we use a value that evaluates to
False to indicate "use the default", where "default" may be drawn from
configuration.  Yes, there are cases where we must treat, say, 0 as
distinct from None, but when we don't need to, we should keep the code
as simple as possible.  After all, I doubt anyone would seriously
suggest that we must always use something like the "_unset" sentinel,
even when None has no special meaning…
-- 
Kevin L. Mitchell <kevin.mitch...@rackspace.com>
Rackspace


_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to