[Python-Dev] Objecttype of 'locals' argument in PyEval_EvalCode

Daniel Trstenjak Daniel.Trstenjak at science-computing.de
Wed Nov 29 10:06:03 CET 2006


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



More information about the Python-Dev mailing list