Skip to main content
 首页 » 编程设计

Python 不会 eval() 代码

2025年05月04日10jillzhang

我有以下 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。)