все Python 3astпонятие
ast.Expression
корень и базовые узлы
Корень дерева, которое строит ast.parse(src, mode='eval'): одно выражение в поле body — его можно скомпилировать для eval().
Синтаксис
ast.parse(source, mode='eval') -> ast.Expression(body)
В отличие от Module, у Expression поле body — один узел, а не список: tree.body[0] здесь падает с TypeError. Режим 'eval' сразу отвергает инструкции: строка 'x = 1' даст SyntaxError ещё при разборе. Не путайте с ast.Expr — это инструкция-выражение внутри Module.body (например, вызов print(...) отдельной строкой). Дерево Expression компилируют только с mode='eval', иначе compile() откажет с TypeError.
Примеры
import ast
tree = ast.parse('2 * 21', mode='eval')
print(type(tree).__name__, type(tree.body).__name__) # → Expression BinOp
print(eval(compile(tree, '<expr>', 'eval'))) # → 42
import ast
try:
ast.parse('x = 1', mode='eval')
except SyntaxError:
print('mode=eval: only expressions') # → mode=eval: only expressions
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности