Why can "exec ... in d" delete items from d?
Troels Therkelsen
t_therkelsen at hotmail.com
Tue Aug 27 15:14:20 EDT 2002
Observe this code:
Python 2.2.1 (#1, Jun 27 2002, 10:29:04)
[GCC 2.95.3 20010315 (release)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Dict(dict):
... def __delitem__(self, key):
... raise "not allowed to delete this item (%s)" % key
...
>>> d = Dict()
>>> d['foo'] = 'bar'
>>> d
{'foo': 'bar'}
>>> del d['foo']
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 3, in __delitem__
not allowed to delete this item (foo)
>>> id(d)
135614436
>>> id(d['foo'])
135599672
>>> exec "print id(foo)" in d
135599672
>>> exec "del foo" in d
>>> d.keys()
['__builtins__']
The docs say that the implementation may or may not add __builtins__ to the
dictionary used in exec, so that is ok.
What I do not understand is why it's possible to delete an item from a
dictionary just because it happens to be used as a global namespace for
exec.
Have I stumbled unto an esoteric bug, or is this just an undocumented
feature of exec?
Regards,
Troels Therkelsen
More information about the Python-list
mailing list