2013-06-21 25 views
8

tôi sử dụng eval() gán một danh sách để một var:eval() không gán biến trong thời gian chạy

eval('mylist = [1,2,3]') 

nhưng khi tôi chạy nó, tôi nhận được một Lỗi Cú pháp. Có gì sai với nó? Nếu tôi không thể thực hiện nhiệm vụ trong eval(), làm thế nào để gán một var trong thời gian chạy.

+1

Trên một lưu ý hoàn toàn không liên quan, bạn có lẽ tốt hơn bằng cách sử dụng 'người dân địa phương() ',' globals() ', hoặc cho thực sự táo bạo, một cuốn từ điển. –

+0

@Snakes and Coffee: Bây giờ tôi đã học được hai chức năng này. Đây là tình huống của tôi: Tôi muốn tạo một thành viên mới var trong một lớp. Làm cách nào để triển khai? –

+3

bạn có thể làm 'setattr (, 'mylist', [1,2,3])' –

Trả lời

13

Sử dụng exec cho báo cáo:

>>> exec 'lis = [1,2,3]' 
>>> lis 
[1, 2, 3] 

eval chỉ hoạt động trên các biểu thức, như 2*2, 4+5 vv

evalexec là okay nếu chuỗi được phát ra từ một nguồn được biết đến, nhưng không sử dụng chúng nếu chuỗi đến từ một nguồn không xác định (đầu vào của người dùng).

đọc: Be careful with exec and eval in Python

+1

Không phải là 'exec ('mylist = [1, 2, 3]')' trong python 3 –

+0

Chèn bắt buộc "cẩn thận với' exec', nó có thể nguy hiểm "ở đây – SethMMorton

Các vấn đề liên quan