все Python 3astфункция
ast.literal_eval()
вспомогательные функции
Вычисляет строку только с литералами Python: числа, строки, списки, словари, множества, кортежи, True/False/None. Замена eval для разбора данных.
Синтаксис
ast.literal_eval(node_or_string)
В отличие от eval, не выполняет код: нет имён, вызовов и импорта, поэтому "__import__('os').system(...)" даёт ValueError, а не запуск команды. Но и арифметики нет: '2**10' и даже '1+2' падают с ValueError (разрешены только сложение и вычитание для комплексных вроде '1+2j' и '1-2j'). Безопасен от исполнения, но не от ресурсов: огромный или глубоко вложенный ввод может исчерпать память или стек, так что на чужих данных ограничивайте длину; для обмена данными удобнее json.loads.
Примеры
import ast
data = ast.literal_eval("{'a': [1, 2], 'b': (3, None)}")
print(data['a'], data['b']) # → [1, 2] (3, None)
print(ast.literal_eval('set()'), ast.literal_eval(' 42')) # → set() 42
import ast
for text in ["__import__('os')", '2**10', 'x']:
try:
ast.literal_eval(text)
except ValueError as e:
print(type(e).__name__) # → ValueError / ValueError / ValueError
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности