[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