我有以下 eval() 东西:
c = Customer()
eval("c.name = row.value('customer', '{c}')".format(c=column_name), { 'c': c, 'row': row})
当我尝试运行它时,我得到了这个:
Traceback (most recent call last):
File "./import.py", line 19, in <module>
c = Customer.save_from_row(row)
File "/home/jason/projects/mcifdjango/mcif/models/customer.py", line 43, in save_from_row
eval("c.name = row.value('customer', '{c}')".format(c=column_name), { 'c': c, 'row': row})
File "<string>", line 1
c.name = row.value('customer', 'name')
^
SyntaxError: invalid syntax
我做错了什么?
编辑:因为看起来我没有很好地解释我的问题的背景,如果有人好奇的话,这就是我最终做的事情:
@classmethod
def save_from_row(cls, row):
c = cls()
map(lambda column_name: setattr(c, column_name, row.value('customer', column_name)), c.distinguishing_column_names())
return c.upsert()
在我发现 setattr() 之前,我在 c 上分别设置了几个不同的属性。
请您参考如下方法:
eval 计算表达式。赋值是一个语句,而不是一个表达式。
甚至不要让我开始了解 eval 是多么容易被滥用,而且在 99.99% 的情况下都是完全不必要的。只需引用许多其他 eval 问题,我敢打赌每个人在回答或评论中至少有一个这样的咆哮 - 所以我会屏住呼吸并链接到 one I like . (也就是说,对于语句,exec 的工作方式类似于 eval。)
