我正在尝试将程序中的所有“> =”切换为“ <”。这是我到目前为止的内容:
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方法怎么了?
答案 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))