2013-06-21 13 views
8

używam eval() przypisać listę var:eval() nie przypisuje zmiennej w czasie wykonywania

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

ale kiedy go uruchomić, mam SyntaxError. Co jest z tym nie tak? Jeśli nie mogę wykonać zadania w eval(), w jaki sposób przypisać zmienną w środowisku wykonawczym.

+1

Na zupełnie niepowiązanych uwaga, jesteś zapewne lepiej wyłączyć za pomocą albo 'mieszkańców()', 'globalnych()', lub naprawdę odważny, słownik. –

+0

@ Snakes and Coffee: Teraz nauczyłem się tych dwóch funkcji. Oto moja sytuacja: chcę utworzyć nowego członka var w klasie. Jak mogę to wdrożyć? –

+3

możesz zrobić 'setattr (, 'mylist', [1,2,3])' –

Odpowiedz

13

Zastosowanie exec do stwierdzeń:

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

eval działa tylko na wyrażeniach, jak 2*2, 4+5 itp

eval i exec są w porządku, jeśli ciąg nadchodzi ze znanego źródła, ale nie należy użyj ich, jeśli ciąg pochodzi z nieznanego źródła (dane wejściowe użytkownika).

Czytaj: Be careful with exec and eval in Python

+1

Nie, to jest 'exec ('mylist = [1, 2, 3]')' w python 3 –

+0

Wstawianie obowiązkowe "bądź ostrożny z' exec', może być niebezpieczny "tutaj – SethMMorton