From: Georg Brandl Date: Tue, 6 Mar 2007 13:33:07 +0000 (+0000) Subject: Fix another reincarnation of bug #1576657 in defaultdict. X-Git-Tag: v2.5.1c1~88 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=75e3c527f66c96241cfdc0922bc2e77e1feba6c0;p=python Fix another reincarnation of bug #1576657 in defaultdict. (backport from rev. 54160) --- diff --git a/Modules/collectionsmodule.c b/Modules/collectionsmodule.c index f98bd49032..9d128fc959 100644 --- a/Modules/collectionsmodule.c +++ b/Modules/collectionsmodule.c @@ -1075,7 +1075,7 @@ static PyTypeObject defdict_type; /* Forward */ PyDoc_STRVAR(defdict_missing_doc, "__missing__(key) # Called by __getitem__ for missing key; pseudo-code:\n\ - if self.default_factory is None: raise KeyError(key)\n\ + if self.default_factory is None: raise KeyError((key,))\n\ self[key] = value = self.default_factory()\n\ return value\n\ "); @@ -1087,7 +1087,11 @@ defdict_missing(defdictobject *dd, PyObject *key) PyObject *value; if (factory == NULL || factory == Py_None) { /* XXX Call dict.__missing__(key) */ - PyErr_SetObject(PyExc_KeyError, key); + PyObject *tup; + tup = PyTuple_Pack(1, key); + if (!tup) return NULL; + PyErr_SetObject(PyExc_KeyError, tup); + Py_DECREF(tup); return NULL; } value = PyEval_CallObject(factory, NULL);