[Python-Dev] switch in Python.

Thomas Wouters thomas@xs4all.net
Tue, 13 Nov 2001 11:05:10 +0100


On Tue, Nov 13, 2001 at 10:45:19AM +0100, M.-A. Lemburg wrote:

> One question: What happens if the implementation finds that x is
> not hashable ?

It _should_ propagate the error upwards, but I see now that the error gets
eaten for some reason. The runtime part of switch is very small:

                case SWITCH:
                        w = POP();
                        v = POP();
                        x = PyDict_GetItem(w, v);
                        if (!x && PyErr_Occurred())
                                break;
                        if (!x) {
                                JUMPBY(oparg);
                                continue;
                        }
                        JUMPBY(PyInt_AsLong(x));
                        continue;

That is, PyDict_GetItem() is supposed to return NULL for missing keys, but
without setting an exception. So if an exception is set, it's a regular
error in the dict lookup, and the error is simply propagated upwards.

Oh, wait, I think I see the problem: stack underflow. The value reaching the
switch is not the one put in, when passing (e.g.) a list to 'whatis'. No
time to look at this now though.

-- 
Thomas Wouters <thomas@xs4all.net>

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