N. Pourcelot wrote: > I can't understand some specific behaviour of the exec statment. > > For example, say that I create such a class A : > > class A: > def __init__(self): > self.n = 3 > self.m = None > def h(self, ini): > n = self.n > m = self.m > if ini: exec("def m(x): return n+x"); self.m=m > else: m(7) > > Now : > obj = A() > obj.h(1) > obj.h(0) > > I get : > > Traceback (most recent call last): > File "<input>", line 1, in ? > File "<input>", line 9, in h > File "<string>", line 1, in m > NameError: global name 'n' is not defined
exec only supports local and global scopes; the "n" inside the exec statement is a not a local, so it's assumed to be a global variable. (Python's lexical scoping requires the compiler to look for free variables in inner scopes before generating code for the outer scope; it cannot do that for exec, for obvious reasons). </F> -- http://mail.python.org/mailman/listinfo/python-list