[Python-Dev] containment checking

Antoine Pitrou solipsis at pitrou.net
Fri Mar 19 23:02:00 CET 2010


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.




More information about the Python-Dev mailing list