
Glenn Linderman <v+python <at> g.nevcal.com> writes:
Sounds to me like containment checking is wrong; that if it gets an exception during the comparison that it should assume unequal, rather than aborting, and continue to the next entry.
Well as the Zen says: Errors should never pass silently. Unless explicitly silenced. If there's a bug in your __eq__ method, rather than getting wrong containment results, you get the proper exception.
Wouldn't the same issue arise for containment tests when disparate, incomparable objects are included in the same set? Why is this different?
That's why equality testing almost never fails between standard types. We do have an (IMO unfortunate) exception in the datetime module, though:
from datetime import tzinfo, timedelta, datetime ZERO = timedelta(0) class UTC(tzinfo): # UTC class ripped off from the official doc ... """UTC""" ... def utcoffset(self, dt): ... return ZERO ... def tzname(self, dt): ... return "UTC" ... def dst(self, dt): ... return ZERO ... utc = UTC() a = datetime.now() b = datetime.now(utc) a == b Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't compare offset-naive and offset-aware datetimes
Regards Antoine.