P
pasa
I'm an old time python user, but just got bitten by namespaces in eval.
If this is an old discussion somewhere, feel free to point me there.
Based on the documentation, I would have expected the following to
work:
def foo(k): print k; print a
ns = {'a':1, 'foo': foo}
eval('foo(2)', ns)
But it does not, complete session:
[harri@labsdevgrid1 ~]$ python
Python 2.4 (#2, Feb 13 2005, 22:08:03)
[GCC 3.4.3 (Mandrakelinux 10.1 3.4.3-3mdk)] on linux2
Type "help", "copyright", "credits" or "license" for more information.2
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<string>", line 0, in ?
huh? I'd almost be tempted to call this a bug?
Playing with locals() and globals() I see that this one works,
which I would not have expected to work:
def foo(k): print k; print ns['a']
ns = {'a':1, 'foo': foo}
eval('foo(2)', ns)
Prints out
2
1
Do functions carry their own pointer to global namespace,
which gets defined at function compile time, or what is
happening here?
-Harri
If this is an old discussion somewhere, feel free to point me there.
Based on the documentation, I would have expected the following to
work:
def foo(k): print k; print a
ns = {'a':1, 'foo': foo}
eval('foo(2)', ns)
But it does not, complete session:
[harri@labsdevgrid1 ~]$ python
Python 2.4 (#2, Feb 13 2005, 22:08:03)
[GCC 3.4.3 (Mandrakelinux 10.1 3.4.3-3mdk)] on linux2
Type "help", "copyright", "credits" or "license" for more information.2
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<string>", line 0, in ?
huh? I'd almost be tempted to call this a bug?
Playing with locals() and globals() I see that this one works,
which I would not have expected to work:
def foo(k): print k; print ns['a']
ns = {'a':1, 'foo': foo}
eval('foo(2)', ns)
Prints out
2
1
Do functions carry their own pointer to global namespace,
which gets defined at function compile time, or what is
happening here?
-Harri