Martin v. Löwis <mar...@v.loewis.de> added the comment:

Reopening. The following piece of code changed it behavior between 2.5 
and 2.6:

def f():
  a = 2
  class C:
    exec 'a = 42'
    abc = a
  return C

print f().abc

In 2.6, this returns 2, because static analysis determines that the read 
of 'a' comes from f's closure, yet the exec gets a new set of locals for 
the body of C where it stores into.

This is highly counter-intuitive. For functions, the issue is resolved 
by banning exec; the same should (now) happen for classes.

----------
nosy: +loewis
status: closed -> open

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue5578>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to