在Python ast中使用存储在._field属性中的值

1 投票
1 回答
875 浏览
提问于 2025-04-16 17:43

这个问题是我在处理 Python 的抽象语法树(AST)时遇到的。

我有一个节点(node),想要获取它的子节点。

节点的 ._field 属性会告诉我这个节点所有子节点的名字。不过,不同类型的节点,这个属性的内容是不同的。

比如,如果这个节点是一个二元操作(BinOp),那么 node._field 会返回一个元组 ('left', 'op', 'right')。

因此,要访问这个节点的子节点,我需要使用 node.left、node.op 和 node.right。

但我想要对任何类型的节点都能这样做。

给定一个节点,如果我使用 node._field,它会给我一个元组。那么我该如何利用这个元组来获取子节点呢?因为这个节点可以是任何类型的,所以我事先并不知道这个元组的具体内容。

如果能提供一些代码示例,那就太好了!谢谢!

1 个回答

2

要遍历一个节点的所有子节点,可以使用 ast.iter_child_nodes() 这个方法。如果你想遍历这个节点的字段,可以使用 ast.iter_fields() 这个方法。

撰写回答