все Python 3astфункция
ast.fix_missing_locations()
вспомогательные функции
Проставляет lineno и col_offset всем узлам дерева, у которых их нет, копируя с родителя. Обязательный шаг перед compile() дерева с новыми узлами.
Синтаксис
tree = ast.fix_missing_locations(tree)
Узлы, созданные вручную или NodeTransformer, позиций не имеют, и compile() падает с TypeError: required field "lineno" missing. unparse и dump при этом работают, поэтому ошибка всплывает только на компиляции. Вызывать на всём результате трансформации: tree = ast.fix_missing_locations(tree) — функция меняет дерево на месте и возвращает его же. Уже заданные позиции не трогает.
Примеры
import ast
tree = ast.parse('print(x)')
call = tree.body[0].value
call.args[0] = ast.BinOp(left=ast.Name(id='x', ctx=ast.Load()), op=ast.Mult(),
right=ast.Constant(value=2))
try:
compile(tree, '<ast>', 'exec')
except TypeError as e:
print(e) # → required field "lineno" missing from expr
tree = ast.fix_missing_locations(tree)
exec(compile(tree, '<ast>', 'exec'), {'x': 21}) # → 42
print(call.args[0].lineno) # → 1
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности