Python不会eval()代码

时间:2011-02-01 19:32:29

标签: python

我有以下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分别设置了几个不同的属性。

2 个答案:

答案 0 :(得分:11)

eval评估表达式。作业是一种陈述,而不是表达。

甚至没有让我开始容易被滥用 - 在99.99%的情况下 - 完全不必要的eval。只要参考其他许多eval个问题,我敢打赌每个问题在答案或评论中至少有一个这样的咆哮 - 所以我会保存我的呼吸并链接到one I like。 (话虽如此,exec的作用类似于eval。)

答案 1 :(得分:2)

这不是你需要做的吗?:

c = Customer()
name_cols = (('name', 'custname'), ('addr', 'cust_addr'))
for name, col in name_cols:
    setattr(c, name, row.value('customer', col))