我想检查以文本表示的任意(在数据中定义的)规则集,而 eval() 很好地完成了这项工作。
例如,定义一个规则来检查 A 和 B 是否都有效:
Rule = "A and B"
print eval(Rule)
那么如何动态地将值分配给任意一组项目呢?
我有一个命名选项列表和一个选择列表。选择中的所有内容都被认为是有效的 (True),而选项中的所有内容,而不是选择中的所有内容都被认为是无效的 (False)。
所以这段代码有效,但我不喜欢它,因为我在本地名称空间中设置值,我无法防止选项名称与我的本地变量发生冲突。
def CheckConstraints(self, Selections):
'Validate the stored constraints'
Good = True
## Undefined options default to False
for i in self.Options:
exec(i+" = False") ## Bad - can I use setattr?
## Set defined Options to True
for i in Selections:
exec(i+" = True") ## Bad - can I use setattr?
for i in self.Constraints:
if not eval( i ):
Good = False
print "Constraint Check Failure:", i, Selections
else:
print "Constraint Check OK:", i, Selections
return Good
我曾尝试使用 setattr,但不清楚 setattr 设置了什么,并且 eval 似乎无法使用设置的值。
我在 python 2.7x
欢迎任何建议?