[IronPython] Issues with "exec X in Y"

Willem Broekema metawilm at gmail.com
Sun Jul 24 02:39:22 PDT 2005


On 7/23/05, Jonathan Jacobs <korpse-ironpython at kaydash.za.net> wrote:
>    config = {}
>    exec file('config.py') in config
>    del config['__builtins__']
> [...]
> My patch however doesn't add a "__builtins__" key to the
> mappable types, so the above code would actually error out in IronPython
> with my patch, so someone probably wants to add that.

No, your code relies on an implementation detail. A Python
implementation may add any key, like __builtins__, to the dictionary,
but is not at all required to. Your code should check for the
existence of the key before deleting it.

There are cases where the difference between Python-the-language and
CPython-the-implementation is not clear, but in this case it's
explicitly documented in
<http://www.python.org/doc/current/ref/exec.html>:

  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__ (!).


- Willem


More information about the users-ironpython.com mailing list