On 12/8/2010 8:01 AM, Jonathan S wrote:
class Global(dict):
def __init__(self):
pass
def __getitem__(self, key):
import __builtin__
if key == 'xx':
return 'xx'
if hasattr(__builtin__, key):
return getattr(__builtin__, key)
else key in self.__dict__:
return self.__dict__[key]
syntax error
def __setitem__(self, key, value):
self.__dict__[key] = value
def __str__(self):
return '<globals> ' + unicode(self.__dict__)
code="""
print globals()
print xx # Does work, prints 'xx'
def q():
print globals().__getitem__('xx') # Does work, prints 'xx'
print globals()['xx'] # Does work, prints 'xx'
print xx # Does not work, cannot find xx
q()
"""
g = Global()
exec(compile(code, 'my code', 'exec'), g, g)
}}}
When asking such questions, paste both the actual code that compiled and
ran and the actual traceback you got in response.
--
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list