Problem with exec
Justus Schwabedal
justus.schwabedal at gmx.de
Fri Mar 14 13:35:51 EDT 2008
On Mar 14, 2008, at 4:41 AM, alitosis at gmail.com wrote:
> 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)
> --
> 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?
More information about the Python-list
mailing list