[Python-3000] PEP 3119 - Introducing Abstract Base Classes
Adam Olsen
rhamph at gmail.com
Sat Apr 28 04:02:18 CEST 2007
On 4/27/07, Thomas Lotze <thomas at thomas-lotze.de> wrote:
> Guido van Rossum wrote:
>
> > Another constraint is that hashable objects, once created, should
> > never change their value (as compared by ``==``) or their hash value.
> > If a class cannot guarantee this, it should not derive from
> > ``Hashable``; if it cannot guarantee this for certain instances only,
> > ``__hash__`` for those instances should raise a ``TypeError``
> > exception.
>
> Shouldn't this rather be a ValueError since it occurs not because of the
> type of the object in question, but its value (while in general, there are
> instances of the same type representing other values which are hashable)?
>>> hash([])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list objects are unhashable
Normally the exception is raised because the type is wrong. Requiring
both TypeError and ValueError be caught just for this special case
would be confusing. A subclass of both could be created, but that
seems pedantic with no practical value.
--
Adam Olsen, aka Rhamphoryncus
More information about the Python-3000
mailing list