Hi,
Being fairly new to Python, I'm trying to figure out the best way to use the
exec statement and I must admit that I am a bit lost.
Consider this case:
exec "print 'a'" in {},{} [exp.1]
It means that I'm (kindly) asking the interpreter to execute the code
string "print 'a'" with empty globals and locals.
Considering that globals and locals are empty, I would expect [exp.1] to
raise an exception about 'print' not being known.
However, the evaluation of [exp.1] produces an output...
>>> exec "print 'a'" in {},{}
a
So, I decided to read more attentively the documentation and here is what
I've found:
"""
As a side effect, an implementation may insert additional keys into the
dictionaries given besides those corresponding to variable names set by the
executed code. For example, the current implementation may add a reference
to the dictionary of the built-in module __builtin__ under the key
__builtins__ (!).
"""
Putting aside the fact that implementation specifics are evil, I would like
to know if there is one way to force builtins not to be added to the scope?
I would rather add this by myself which, in my opinion, is a more explicit,
thus more pythonic, way of doing.
Any comment on this?
Regards,
Quentin
--
http://mail.python.org/mailman/listinfo/python-list