如何解析python代码并只获取没有缩进的变量?

2024-04-29 06:43:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图提取代码中没有缩进的所有变量,下面是一个简单的示例:

import ast
import astunparse
class AnalysisNodeVisitor(ast.NodeVisitor):
    def __init__(self, nodename):
        super().__init__()
        self.nodename=nodename
        self.setVariables={}
    def visit_Assign(self,node):
        print(self.nodename,astunparse.unparse(node.targets))
        #print(ast.dump(node))

        
Analyzer=AnalysisNodeVisitor("example1")
tree=ast.parse('''\
a = 10

for i in range(10):
    b=x+i

if(x==10):
    c=36

d=20
''')
Analyzer.visit(tree)

output:

example1 a

example1 b

example1 c

example1 d

这个例子打印出了所有4个变量(a、b、c和d),我想知道是否有一种方法可以让它只打印赋值a、d,因为赋值前没有缩进

我试图转储节点,看看是否有可以用来过滤变量的东西,但我找不到任何东西(例如,它只是输出这样一个:“Assign(targets=[Name(id='a',ctx=Store())],value=Num(n=10))”


Tags: importselfnodeinitdefvisitastanalyzer
1条回答
网友
1楼 · 发布于 2024-04-29 06:43:12

我想如果你只看一下tree.body,你就能找到你所有的顶级赋值语句

运行此代码:

import ast
import astunparse

tree=ast.parse('''\
a = 10

for i in range(10):
    b=x+i

if(x==10):
    c=36

d=20
''')

for thing in tree.body:
    if isinstance(thing, ast.Assign):
        print(astunparse.unparse(thing.targets))

产生:


a


d

相关问题 更多 >