簡體   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