[Python-Dev] issue5578 - explanation
Guido van Rossum
guido at python.org
Wed Apr 1 05:25:01 CEST 2009
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