Python `\u ast中导入的函数的名称`
我正在使用Python `\u ast中导入的函数的名称`,python,import,abstract-syntax-tree,Python,Import,Abstract Syntax Tree,我正在使用\u ast进行一些代码分析,在获取导入函数的名称时遇到了问题。 假设我的代码文件(code.py)如下所示: import somemod def foo(): somemod.bar() root.body[1].body[0] 当我使用root=compile(open('codefile.py').read(),'codefile.py','exec',_ast.PyCF_ONLY_ast)获取此文件的ast时,我可以得到调用somemod.bar的行,如下所示:
\u ast
进行一些代码分析,在获取导入函数的名称时遇到了问题。假设我的代码文件(
code.py
)如下所示:
import somemod
def foo():
somemod.bar()
root.body[1].body[0]
当我使用root=compile(open('codefile.py').read(),'codefile.py','exec',_ast.PyCF_ONLY_ast)
获取此文件的ast时,我可以得到调用somemod.bar
的行,如下所示:
import somemod
def foo():
somemod.bar()
root.body[1].body[0]
这是一个\u ast.Expr
节点。然后,我希望通过查看此节点可以获得
somemod.bar
。但是,当我查看root.body[1].body[0].value.func.value.id时,我得到了somemod
。据我所知,我找不到一种方法来获取bar
或somemod.bar
我错过了什么?如何到达栏?它位于value.func.attr
中:
>>> root = compile(open('codefile.py').read(), 'codefile.py', 'exec', _ast.PyCF_ONLY_AST)
>>> root.body[1].body[0].value.func
<_ast.Attribute object at 0x9703acc>
>>> f = root.body[1].body[0].value.func
>>> vars(f)
{'col_offset': 4, 'ctx': <_ast.Load object at 0xb6e2c6cc>, 'attr': 'bar', 'value': <_ast.Name object at 0x9703a8c>, 'lineno': 3}
>>> f.attr
'bar'
>>> f.value.id
'somemod'
>>root=compile(打开('codefile.py').read(),'codefile.py','exec','u ast.PyCF\u ONLY\u ast)
>>>root.body[1]。body[0]。value.func
>>>f=root.body[1]。body[0]。value.func
>>>vars(f)
{'col_offset':4,'ctx':,'attr':'bar','value':,'lineno':3}
>>>f.attr
“酒吧”
>>>f.value.id
“somemod”
它位于value.func.attr
中:
>>> root = compile(open('codefile.py').read(), 'codefile.py', 'exec', _ast.PyCF_ONLY_AST)
>>> root.body[1].body[0].value.func
<_ast.Attribute object at 0x9703acc>
>>> f = root.body[1].body[0].value.func
>>> vars(f)
{'col_offset': 4, 'ctx': <_ast.Load object at 0xb6e2c6cc>, 'attr': 'bar', 'value': <_ast.Name object at 0x9703a8c>, 'lineno': 3}
>>> f.attr
'bar'
>>> f.value.id
'somemod'
>>root=compile(打开('codefile.py').read(),'codefile.py','exec','u ast.PyCF\u ONLY\u ast)
>>>root.body[1]。body[0]。value.func
>>>f=root.body[1]。body[0]。value.func
>>>vars(f)
{'col_offset':4,'ctx':,'attr':'bar','value':,'lineno':3}
>>>f.attr
“酒吧”
>>>f.value.id
“somemod”
啊!非常感谢你。这让我发疯。PS:谢谢vars
(以前不知道)啊!非常感谢你。这让我发疯。PS:谢谢vars
(以前不知道)