eval函数在python中不起作用

时间:2013-08-25 18:21:13

标签: python string eval

我有以下code

tmpVariable = completeVariableName[filedsValueCounter];
tmpValue = fieldsValue[fieldsName[fieldsNameCounter]];
print eval ("'%s = \"%s\";' % (tmpVariable, tmpValue)");

上述代码的输出是:

self.name = "Peter"

下一行评估函数是:

print self.name

但它的输出是:

None

问题:我的问题在哪里?

3 个答案:

答案 0 :(得分:2)

为了在Python中执行语句(例如问题中的赋值),您必须使用exec(),因为eval()仅适用于表达式 (评估价值的东西)。无论如何,在这种情况下你不需要评估字符串,setattr是要走的路:

setattr(self, 'name', 'Peter')

上面的代码与此代码具有相同的效果:

self.name = 'Peter'

答案 1 :(得分:1)

eval用于表达式,但赋值是一个声明。

但是这里没有必要使用它。您应该使用setattr

答案 2 :(得分:1)

如果您想使用替换创建类的实例,那该怎么办。

类似的东西:

class Class1:
    pass
class Class2:
    def generateParameters(self):
        self.parameters = ['a', 'b', 'c']
        for i in parameters:
        "self.{0} = class2()".format(i)

这个想法是用特定的变量生成一些实例