On Friday, June 13, 2014 8:07:45 AM UTC+2, Marko Rauhamaa wrote: > > The documentation is a bit vague about it: > > If only globals is provided, it must be a dictionary, which will be > used for both the global and the local variables. If globals and > locals are given, they are used for the global and local variables, > respectively. If provided, locals can be any mapping object.
Interesting. This paragraph explicitly states "locals can be any mapping object," but that seems to be false: class Namespace(dict): def __getitem__(self, key): print("getitem", key) def __setitem__(self, key, value): print("setitem", key, value) def fun(): x # should call locals.__getitem__ y = 1 # should call locals.__setitem__ exec(fun.__code__, {}, Namespace()) Neither __getitem__ nor __setitem__ seem to be called on the local variables. -- https://mail.python.org/mailman/listinfo/python-list