[英]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.