В документе Whats New in Python 2.7 говорится, что поддержка набора литералов была перенесена из Python 3.1. Однако, похоже, эта поддержка не была расширена до функции ast
module literal_eval()
, как показано ниже.
Был ли это преднамеренный, надзор или что-то еще - и каковы самые чистые обходные пути для создания литерального набора из строкового представления? (Я предполагаю, что следующие работы в 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()
.