Since you put out to objectives, I'd like to propose a little different approach...
1. Have eval/exec accept any mapping object as input
2. Make those two copy the content of the mapping object into real dictionaries
3. Provide a hook into the dictionary implementation that can be used to redirect KeyErrors and use that redirection to forward the request to the original mapping objects
Interesting counterproposal. I'm not sure whether any of the proposals on the table really do what's needed for e.g. case-insensitive namespace handling. I can see how all of the proposals so far allow case-insensitive reference name handling in the global namespace, but don't we also need to hook into the local-namespace creation process to allow case-insensitivity to work throughout? --david