Thanks for you reply. I added locals() to my exec statment, so it worked, but I wasn't so sure about my interpretation of the problem.
Fredrik Lundh wrote: > 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