[Python-Dev] Objecttype of 'locals' argument in PyEval_EvalCode
Guido van Rossum
guido at python.org
Wed Nov 29 16:39:25 CET 2006
This seems a bug. In revision 36714 by Raymond Hettinger, the
restriction that locals be a dict was relaxed to allow any mapping.
On 11/29/06, Daniel Trstenjak <Daniel.Trstenjak at science-computing.de> wrote:
>
> Hi all,
>
> I would like to know the definition of the 'locals' object given to
> PyEval_EvalCode. Has 'locals' to be a python dictionary or a subtype
> of a python dictionary, or is it enough if the object implements the
> necessary protocols?
>
> The python implementation behaves different for the two following code
> lines:
>
> from modul import symbol
> from modul import *
>
> In the case of the first one, it's enough if the object 'locals' implements
> the necessary protocols. The second one only works if the object 'locals'
> is a type or subtype of dictionary.
>
> The problem lies in Python-2.5/Python/ceval.c:
>
> static int
> import_all_from(PyObject *locals, PyObject *v)
> {
> ...
> 4046 value = PyObject_GetAttr(v, name);
> 4047 if (value == NULL)
> 4048 err = -1;
> 4049 else
> >>> 4050 err = PyDict_SetItem(locals, name, value);
> 4051 Py_DECREF(name);
> ...
> }
>
> Changing PyDict_SetItem in line 4050 with PyObject_SetAttr could fix it.
>
>
> Best Regards,
> Daniel
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/guido%40python.org
>
--
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-Dev
mailing list