Problem with exec
Justus Schwabedal
justus.schwabedal at gmx.de
Wed Mar 12 19:58:44 EDT 2008
Dear python users!
I try to setted up compile-free parallelism using the exec command.
However I had some problems with namespaces which I find mysterious
although I managed to work around. But the workaround is not nice, so
I wonder if there are ways.
I do the following,
bash-3.2$ cat execBug.py
#! /usr/bin/python
header="""
from scipy import randn
def f():
return randn()
"""
def g(head):
exec header
return f()
print "g(header) =",g(header)
bash-3.2$ ./execBug.py
g(header) =
Traceback (most recent call last):
File "./execBug.py", line 10, in <module>
print "g(header) =",g(header)
File "./execBug.py", line 9, in g
return f()
File "<string>", line 4, in f
NameError: global name 'randn' is not defined
However this works:
bash-3.2$ cat execBug.py
#! /usr/bin/python
header="""
from scipy import randn
def f():
return randn()
"""
exec header
print "f() =",f()
bash-3.2$ ./execBug.py
f() = 1.44707148916
If for the first example I add "global randn", it works again.
However I do not understand how the nested namespaces interact here.
Isn't this an unwanted feature in the functionality?
I'm looking foreward to your comments, Justus
More information about the Python-list
mailing list