[Python-Dev] variable name resolution in exec is incorrect (original) (raw)

Colin H hawkett at gmail.com
Thu May 27 02:53:15 CEST 2010


Hi Guido,

Thanks for the possible workaround - unfortunately 'stuff' will contain a whole stack of things that are not in 'context', and were not defined in 'user_code' - things that python embeds - a (very small) selection -

{..., 'NameError': <type 'exceptions.NameError'>, 'BytesWarning': <type 'exceptions.BytesWarning'>, 'dict': <type 'dict'>, 'input': <function input at 0x10047a9b0>, 'oct': , 'bin': , ...}

It makes sense why this happens of course, but upon return, the globals dict is very large, and finding the stuff you defined in your user_code amongst it is a very difficult task. Avoiding this problem is the 'locals' use-case for me. Cheers,

Colin

On Thu, May 27, 2010 at 1:38 AM, Guido van Rossum <guido at python.org> wrote:

This is not easy to fix. The best short-term work-around is probably a hack like this:

def definestuff(usercode):  context = {...}  stuff = {}  stuff.update(context)  exec(usercode, stuff)  for key in context:  if key in stuff and stuff[key] == context[key]:  del stuff[key]  return stuff -- --Guido van Rossum (python.org/~guido)



More information about the Python-Dev mailing list