все Python 3astфункция
ast.copy_location()
вспомогательные функции
Копирует позицию (lineno, col_offset и концы) со старого узла на новый и возвращает новый. Нужна, когда узел заменяется другим.
Синтаксис
new_node = ast.copy_location(new_node, old_node)
Копирует только позицию самого узла, а не его потомков: вложенные новые узлы останутся без lineno, и после замены всё равно нужен fix_missing_locations. Зато ошибки в трассировке скомпилированного кода будут указывать на строку исходного узла, а не на строку родителя. Типичная запись в трансформере: return ast.copy_location(new, node).
Примеры
import ast
tree = ast.parse('x = 1 + 2')
old = tree.body[0].value
new = ast.copy_location(ast.Constant(value=3), old)
print(new.lineno, new.col_offset, new.end_col_offset) # → 1 4 9
tree.body[0].value = new
print(ast.unparse(tree)) # → x = 3
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности