Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #73759

Re: unorderable error: less ok, equal ok, less-or-equal gives unorderable error!

From Peter Otten <__peter__@web.de>
Subject Re: unorderable error: less ok, equal ok, less-or-equal gives unorderable error!
Date 2014-06-30 21:34 +0200
Organization None
References <cae1276e-4463-4696-aa6b-f9e64399926b@googlegroups.com>
Newsgroups comp.lang.python
Message-ID <mailman.11349.1404156879.18130.python-list@python.org> (permalink)

Show all headers | View raw


RainyDay wrote:

> Hi, in python 3.4.1, I get this surpising behaviour:
> 
>>>> l=Loc(0,0)
>>>> l2=Loc(1,1)
>>>> l>l2
> False
>>>> l<l2
> True
>>>> l<=l2
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> TypeError: unorderable types: Loc() <= Loc()
>>>> l==l2
> False
>>>> l<l2 or l==l2
> True
> 
> Loc implements both __lt__ and __eq__, which should be enough (?),

These two methods should be sufficient if you use the 
functools.total_ordering class decorator, see

https://docs.python.org/dev/library/functools.html#functools.total_ordering

> but even after I've added __lte__, I still have the error.

There is no special method of that name; it should probably be __le__().

> 
> implementation:
> 
> class Loc:
>     def __init__(self, x, y):
>         self._loc = x, y
>         self.x, self.y = x, y
> 
>     def __eq__(self, other):
>         return self._loc == getattr(other, "_loc", None)

Note that None is not a good default when _loc is expected to be a tuple:

>>> None < ()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: NoneType() < tuple()

> 
>     def __lt__(self, other):
>         return self._loc < other._loc
> 
>  - andrei

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

unorderable error: less ok, equal ok, less-or-equal gives unorderable error! RainyDay <andrei.avk@gmail.com> - 2014-06-30 12:12 -0700
  Re: unorderable error: less ok, equal ok, less-or-equal gives unorderable error! Peter Otten <__peter__@web.de> - 2014-06-30 21:34 +0200
    Re: unorderable error: less ok, equal ok, less-or-equal gives unorderable error! RainyDay <andrei.avk@gmail.com> - 2014-06-30 13:29 -0700
  Re: unorderable error: less ok, equal ok, less-or-equal gives unorderable error! Ethan Furman <ethan@stoneleaf.us> - 2014-06-30 12:52 -0700
  Re: unorderable error: less ok, equal ok, less-or-equal gives unorderable error! Peter Otten <__peter__@web.de> - 2014-07-01 14:43 +0200

csiph-web