Поддержка ast.literal_eval () для заданных литералов в Python 2.7?

В Что нового в 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 () .

.

12
задан martineau 10 February 2014 в 23:38
поделиться