В документе Что нового в Python 2.7 говорится, что поддержка заданных литералов была перенесена из Python 3.1. Однако похоже, что эта поддержка не была расширена до функции ast
модуля *1003*, как показано ниже.
Было ли это преднамеренным, упущением или чем-то еще - и каковы самые чистые обходные пути для создания набора литералов из строкового представления? (Я предполагаю, что следующие работы в Python 3.1+, верно?)
import ast
a_set = {1,2,3,4,5}
print a_set
print ast.literal_eval('{1,2,3,4,5}')
Вывод с сообщением об ошибке:
set([1, 2, 3, 4, 5])
Traceback (most recent call last):
File "...\setliterals.py", line 4, in <module>
print ast.literal_eval('{1,2,3,4,5}')
File "...\Python\lib\ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "...\Python\lib\ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
P.S. Единственный обходной путь, который я могу придумать, - это использовать eval()
.