[Python-Dev] PyDict_GetItem & dict_subscript

Thomas Wouters thomas@xs4all.net
Wed, 14 Nov 2001 12:03:32 +0100


While trying to figure out why passing an unhashable object to switch didn't
cause a TypeError: unhashable object, I found out PyDict_GetItem and
dict_subscript behave differently in that respect. PyDict_GetItem does:

                hash = PyObject_Hash(key);
                if (hash == -1) {
                        PyErr_Clear();   
                        return NULL;
                }

whereas dict_subscript does:

                hash = PyObject_Hash(key);
                if (hash == -1)
                        return NULL;

PyDict_SetItem and PyDict_DelItem both behave like dict_subscript (that is,
they propagate the error upwards, instead of clearing the error.) Is this
intentional ? Why ? :P And what is the 'right' way to do a PyDict_GetItem()
that gives the proper error-message without relying on the need for that
particular dict (which could be a subtype that has more or less
restrictions) to have hashable keys ? 

-- 
Thomas Wouters <thomas@xs4all.net>

Hi! I'm a .signature virus! copy me into your .signature file to help me spread!