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: [EMAIL PROTECTED] ~]$ 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. >>> def foo(k): print k; print a ... >>> ns = {'a':1, 'foo': foo} >>> eval('foo(2)', ns) 2 Traceback (most recent call last): File "<stdin>", line 1, in ? File "<string>", line 0, in ? File "<stdin>", line 1, in foo NameError: global name 'a' is not defined >>> 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 -- http://mail.python.org/mailman/listinfo/python-list