Python Glossary English

все 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Сообщить о неточности