[Python-Dev] issue5578 - explanation

Maciej Fijalkowski fijall at gmail.com
Wed Apr 1 05:36:24 CEST 2009


Because classes have now it's own local scope (according to Martin)

It's not about exec in class, it's about exec in class in nested function.

On Wed, Apr 1, 2009 at 5:25 AM, Guido van Rossum <guido at python.org> wrote:
> Well hold on for a minute, I remember we used to have an exec
> statement in a class body in the standard library, to define some file
> methods in socket.py IIRC.  It's a totally different case than exec in
> a nested function, and I don't believe it should be turned into a
> syntax error at all. An exec in a class body is probably meant to
> define some methods or other class attributes. I actually think the
> 2.5 behavior is correct, and I don't know why it changed in 2.6.
>
> --Guido
>
> On Tue, Mar 31, 2009 at 8:15 PM, Maciej Fijalkowski <fijall at gmail.com> wrote:
>> So. The issue was closed and I suppose it was closed by not entirely
>> understanding
>> the problem (or I didn't get it completely).
>>
>> The question is - what the following code should do?
>>
>> def f():
>>  a = 2
>>  class C:
>>    exec 'a = 42'
>>    abc = a
>>  return C
>>
>> print f().abc
>>
>> (quick answer - on python2.5 it return 42, on python 2.6 and up it
>> returns 2, the patch changes
>> it to syntax error).
>>
>> I would say that returning 2 is the less obvious thing to do. The
>> reason why IMO this should
>> be a syntax error is this code:
>>
>> def f():
>>  a = 2
>>  def g():
>>    exec 'a = 42'
>>    abc = a
>>
>> which throws syntax error.
>>
>> Cheers,
>> fijal
>> _______________________________________________
>> 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