[Python-3000] None in Comparisons

M.-A. Lemburg mal at egenix.com
Tue Nov 11 14:54:48 CET 2008


On 2008-11-11 14:28, Antoine Pitrou wrote:
> M.-A. Lemburg <mal <at> egenix.com> writes:
>> Why was the special case for None being "smaller" than all other
>> objects in Python removed from Python 3.0 ? (see object.c in Py2.x)
> 
> Because ordered comparisons (<, <=, >, >=) are much stricter in 3.0 than in 2.x.
> In practice, ordered comparisons which don't have an obvious, intuitive meaning
> now raise a TypeError (such as comparing a number and a string).

That's fine. I'm just talking about the special case for None that
has existed in Python for years - and for a good reason.

>> It looks like a bug in Python 3.0 to me, since None is widely used as
>> "n/a" object in Python.
> 
> But why should "n/a" (or "missing", or "undefined") imply "smaller than
> everything else"?

It's just a convention based on viewing None as "nothing" or the
empty set.

> I understand it might be a case of "practicality beats purity", but this is not
> semantically obvious and can also let bugs slip through (the very bugs that the
> stricter ordered comparison semantics in 3.0 are meant to make easier to
> detect).

Please note that I'm just talking about that one object, not all
the other cases where comparisons between apples and oranges don't
make sense :-)

> Also there are cases where you'll want something which is *bigger* than
> everything else, not smaller.

Having None compare smaller than all other objects is just a convention,
nothing more.

If there's a need for an object that compares larger than any other
object in Python, we could introduce another singleton for this, but I
don't really see the need.

> (SQL seems to do such a thing with NULL, but SQL isn't exactly a good example
> for programming language design, is it?)

NULLs are a fact in life, not only in SQL, but also in numerics and
statistics. You often don't want a complex calculation or query to
fail just because a few input values are not available.

None has been used in Python for the same purpose in these application
areas.

> If it is really useful, I think i would be cleaner and more explicit to add the
> Smallest and Largest constants suggested elsewhere, than reuse a very widely
> used constant (None) for half of the purpose.

Fair enough.

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source  (#1, Nov 11 2008)
>>> Python/Zope Consulting and Support ...        http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________

:::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! ::::


   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
           Registered at Amtsgericht Duesseldorf: HRB 46611


More information about the Python-3000 mailing list