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