python - 如何使缺失的变量自动创建?
问题描述
我需要实现一个表达式,如:
def expr():
return a
必须使用 exec: 进行调用
exec(expr.__code__, expenv)
,expenv
它是继承 ordereddict 的类的实例。所有缺失的变量必须自动创建。
我试图覆盖__missing__
方法,但它不起作用。
from collections import OrderedDict
class ExprGlobals(OrderedDict):
def __init__(self):
super(ExprGlobals, self).__init__()
def __missing__(self, key):
self[key] = 7
return self[key]
def expr():
return a
expenv = ExprGlobals()
exec (expr.__code__, expenv)
输出为NameError: global name 'a' is not defined。变量 a 应该是自动创建的并且等于 7。
from collections import OrderedDict
class ExprGlobals(OrderedDict):
def __init__(self):
self['a'] = 7
super(ExprGlobals, self).__init__()
def __missing__(self, key):
self[key] = 7
return self[key]
def expr():
return a
expenv = ExprGlobals()
exec (expr.__code__, expenv)
此代码将无错误地运行。但这不是解决方案。