在Eval函数中,如果某些字符串变量不是它们,我该如何跳过它

时间:2012-03-15 06:32:05

标签: python dictionary

我有这种类型的词典x={'a':1,'b':2}。 我还有一个dict,我存储了公式

x1={'c':{'p':'pre','r':'ref','2010':'a+b'},'d': {'p':'pre','r':'ref','2010':'f+g'}

我正在使用eval来计算公式。为此,我使用代码

for k,v in x1.iteritems():
   if eval(x1[k]['2010'],x) is False:
       continue

实际上“a”和“b”的值是他们的,但“f”和“g”的值不是他们的 eval(x1['c']['2010'],x)有效但eval(x1['d]['2010'],x)失败,所以我想跳过此评估。但它显示'f'没有定义。

3 个答案:

答案 0 :(得分:1)

为什么要使用eval()?为什么不测试价值呢? 此外,由于您使用.items()获得了密钥和值,因此您无需重新引用该字典。

for k, v in x.items():
    if not v:
        continue

答案 1 :(得分:0)

您可能想尝试:

for k,v in x1.iteritems():
    try:
        eval(x1[k]['2010'],x)
    except NameError:
       continue

但恕我直言,这个概念有些奇怪 - 或者我只是不明白......

顺便说一句:x1的定义中缺少右括号。

答案 2 :(得分:0)

您缺少一个概念:lambda表达式。它们允许您创建单表达式函数。

因此,您可以eval('a+b', {'a':1,'b':2})代替(lambda a,b: a+b)(1,2)。 Lambda表达式(如函数)是可以在dict中保存的第一类对象。