繁体   English   中英

Python不会eval()代码

[英]Python won't eval() code

我有以下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计算表达式 赋值是语句,而不是表达式。

而且甚至不让我开始了解如何容易被误用,并且在所有情况下(99.99%)完全不需要eval 只需参考众多其他eval问题,我敢打赌,每个人在回答或评论中至少要有一个这样的咆哮-因此,我将屏住呼吸并链接到一个喜欢的问题 (也就是说, exec作用类似于eval的语句。)

这不是您需要的吗?:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM