On 10/30/07, Steven Bethard <[EMAIL PROTECTED]> wrote: > On 10/30/07, Adam Olsen <[EMAIL PROTECTED]> wrote: > > cmp and __cmp__ are doomed, due to unorderable types now raising exceptions: > > > > >>> cmp(3, 'hello') > > Traceback (most recent call last): > > File "<stdin>", line 1, in <module> > > TypeError: unorderable types: int() < str() > > >>> 3 == 'hello' > > False > > > > A mixin for __cmp__ would be sufficient for scalars (where you can > > avoid this exception and your size is constant), but not for > > containers (which need to avoid inappropriate types and wish to avoid > > multiple passes.) > > I don't understand this conclusion. If you start comparing things > that are unorderable, you'll get an exception. But cmp() still makes > sense when you compare other things:: > > >>> cmp((1, 'a', 4.5), (1, 'a', 6.2)) > -1 > >>> cmp([6, 5, 4], [6, 4, 5]) > 1 > > I definitely don't want any cmp/__cmp__ implementation that swallows > exceptions when the types don't align, e.g.:: > > >>> cmp((1, 'a'), ('a', 1)) > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: unorderable types: int() < str()
What I meant is that you can't use a mixin to map __eq__ to __cmp__, as you'll get TypeError even though == is defined for those types. -- Adam Olsen, aka Rhamphoryncus _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com