On Mar 14, 2008, at 4:41 AM, [EMAIL PROTECTED] wrote: > 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
That's what I was looking for: It's probably even a faster solution than declaring all the imports global, isn't it? -- http://mail.python.org/mailman/listinfo/python-list