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