1

我有以下内容code

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

上述代码的输出是:

self.name = "Peter"

eval 函数的下一行是:

print self.name

但它的输出是:

None

问题:我的问题在哪里?

4

3 回答 3

2

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

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

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

self.name = 'Peter'
于 2013-08-25T18:41:35.587 回答
1

eval是用于表达式,但赋值是一个语句。

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

于 2013-08-25T18:32:58.590 回答
1

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

像这样的东西:

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

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

于 2014-04-25T13:35:59.350 回答