我试图子类的字典用在exec方法。 最后,我想当地的功能,有一个自定义名称作用域的行为。
在下面的代码,函数b()
事实上确实有正确的globals()
的字典提供给它,但它未能解决时要搜索它z
。
是否函数b()
先不要搜索locals()
则globals()
十分不解。 任何帮助表示赞赏。
t = '''
def b():
# return (globals()['z']) #works
return z #fails
b()
'''
class MyDict(dict):
def __init__(self, g):
dict.__init__(self)
self.my_g = g
def __getitem__(self, key):
print("GET ", key)
try:
val = dict.__getitem__(self, key)
except:
print("GET exception1")
val = self.my_g[key]
return val
g = {'z':123}
md = MyDict(g)
#fails to find z
exec(t, md, md)
#works
#exec(t, g, g)
产量
GET b
Traceback (most recent call last):
File "/project1/text12", line 31, in <module>
File "<string>", line 6, in <module>
File "<string>", line 4, in b
NameError: global name 'z' is not defined