如何使用Python ast模块的NodeTransformer类

时间:2019-10-06 17:16:34

标签: python python-3.x abstract-syntax-tree

我正在尝试将程序中的所有“> =”切换为“ <”。这是我到目前为止的内容:

import ast
from astor import to_source

class Visitor(ast.NodeTransformer):
    def generic_visit(self, node):
        ast.NodeVisitor.generic_visit(self, node)

    def visit_GtE(self, node):
        node2 = ast.Lt()
        ast.copy_location(node2, node)
        ast.NodeVisitor.generic_visit(self, node2)
        return node2

def mutate(filename, numMutations):
    file = open(filename)
    contents = file.read()
    parsed = ast.parse(contents)
    nodeVisitor = Visitor()
    nodeVisitor.visit(parsed)
    print(to_source(parsed))

当我打电话给mutate时,什么也没变。我的visit_GtE方法怎么了?

1 个答案:

答案 0 :(得分:0)

NodeTransformer不会就地转换AST。 visit方法返回 new AST。因此,您需要将此变量分配给mutate函数中的变量,然后输出新的AST。

def mutate(filename, numMutations):
    file = open(filename)
    contents = file.read()
    parsed = ast.parse(contents)
    nodeVisitor = Visitor()
    # Capture the new AST.
    transformed = nodeVisitor.visit(parsed)
    print(to_source(transformed))