On Mar 14, 9:47 am, Justus Schwabedal <[EMAIL PROTECTED]> wrote: [snipped] > However when I do this: > > bash-3.2$ cat execBug2.py > #! /usr/bin/python > header=""" > from scipy import randn > def f(): > return randn() > """ > def g(): > exec header > return f() > print "g() =",g() > bash-3.2$ ./execBug2.py > g() = > Traceback (most recent call last): > File "./execBug2.py", line 10, in <module> > print "g() =",g() > File "./execBug2.py", line 9, in g > return f() > File "<string>", line 4, in f > NameError: global name 'randn' is not defined > bash-3.2$ ??? > > I get this global name error. I can fix it with adding some line like > "global randn" but I don't want to do this. I want to do exactly what I > wrote: Import the function scipy.randn in the local namespace of the > > function "g" so that "return f()" makes sense. Can anybody help me out? > Yours Justus
Maybe using an explicit namespace is good enough for your needs: #! /usr/bin/python header=""" from scipy import randn def f(): return randn() """ def g(): n = {} exec header in n return n['f']() print "g() =",g() (i don't understand the issues, but I can cut-and-paste with the best of them) -- http://mail.python.org/mailman/listinfo/python-list