Python Glossary English

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