[英]How to parse python code and only get variables with no indentation?
我正在嘗試提取代碼中沒有縮進的所有變量,這是一個簡單的示例:
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())],值=Num(n=10))')。
我想如果你只看一下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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.