如何使用 Python ast 模块的 NodeTransformer 类



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

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))

当我称突变为突变时,什么都没有改变。我的visit_GtE方法有什么问题?

NodeTransformer不会就地转换 AST。visit方法返回一个新的AST。 因此,您需要将其分配给突变函数中的一个变量,并输出新的 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))

最新更新