Problem with exec

alitosis at gmail.com alitosis at gmail.com
Thu Mar 13 23:41:12 EDT 2008


On Mar 14, 9:47 am, Justus Schwabedal <justus.schwabe... at gmx.de>
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)



More information about the Python-list mailing list