Python Glossary English

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