[Python-Dev] variable name resolution in exec is incorrect

2010-05-26 Thread Colin H
Hi, issue991196 was closed being described as intentional. I've added a comment in that issue which argues that this is a serious bug (also aserted by a previous commenter - Armin Rigo), because it creates a unique, undocumented, oddly behaving scope that doesn't apply closures correctly. At t

Re: [Python-Dev] variable name resolution in exec is incorrect

2010-05-26 Thread Colin H
Thanks for the details on why the observed behaviour occurs - very clear. My only query would be why this is considered correct? Why is it running as a class namespace, when it is not a class? Is there any reason why this is not considered a mistake? Slightly concerned that this is being considered

Re: [Python-Dev] variable name resolution in exec is incorrect

2010-05-26 Thread Colin H
The changes to the docs will definitely help in understanding why this behaves as it does. I would like like to take one last stab though at justifying why this behaviour isn't correct - will leave it alone if these arguments don't stack up :) Appreciate the input and discussion. Terry Jan Reedy

Re: [Python-Dev] variable name resolution in exec is incorrect

2010-05-26 Thread Colin H
Mark Dickinson wrote: > Seems to me the whole idea of being able to specify > separate global and local scopes for top-level code is > screwy in the first place. Are there any use cases for > it? Maybe the second scope argument to exec() should > be deprecated? It is running as class namespace th

Re: [Python-Dev] variable name resolution in exec is incorrect

2010-05-26 Thread Colin H
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': , 'BytesWarning': , 'dict': , 'input': , 'oct': ,

Re: [Python-Dev] variable name resolution in exec is incorrect

2010-05-26 Thread Colin H
Guido van Rossum wrote: > On Wed, May 26, 2010 at 5:53 PM, Colin H wrote: >>   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' -

Re: [Python-Dev] variable name resolution in exec is incorrect

2010-05-27 Thread Colin H
rn_stuff['__builtins__']  for key in context:    if key in return_stuff and return_stuff[key] == context[key]:      del return_stuff[key]  return return_stuff On Thu, May 27, 2010 at 2:13 AM, Colin H wrote: > Of course :) - I need to pay more attention. Your workaround should do

Re: [Python-Dev] variable name resolution in exec is incorrect

2010-05-27 Thread Colin H
Yep fair call - was primarily modifying Guido's example to make the point about not being able to delete from the globals returned from exec - cheers, Colin On Thu, May 27, 2010 at 2:09 PM, Scott Dial wrote: > On 5/27/2010 7:14 AM, Colin H wrote: >> def define_stuff(user_code)

Re: [Python-Dev] variable name resolution in exec is incorrect

2010-05-27 Thread Colin H
Just to put a couple of alternatives on the table that don't break existing code - not necessarily promoting them, or suggesting they would be easy to do - 1. modify exec() to take an optional third argument - 'scope_type' - if it is not supplied (but locals is), then it runs as class namespace -

Re: [Python-Dev] variable name resolution in exec is incorrect

2010-05-27 Thread Colin H
This option sounds very promising - seems right to do it at the compile stage - i.e. compile(code_str, name, "closure") as you have suggested. If there were any argument against, it would be that the most obvious behaviour (function namespace) is the hardest to induce, but the value in knowing you

Re: [Python-Dev] variable name resolution in exec is incorrect

2010-05-27 Thread Colin H
By hardest to induce I mean the default compile exec(code_str, {}, {}) would still be class namespace, but it's pretty insignificant. On Fri, May 28, 2010 at 12:32 AM, Colin H wrote: > This option sounds very promising - seems right to do it at the > compile stage - i.e. compile(cod

Re: [Python-Dev] variable name resolution in exec is incorrect

2010-05-29 Thread Colin H
Perhaps the next step is to re-open the issue? If it is seen as a bug, it would be great to see a fix in 2.6+ - a number of options which will not break backward compatibility have been put forward - cheers, Colin On Thu, May 27, 2010 at 9:05 PM, Reid Kleckner wrote: > On Thu, May 27, 2010 at 11