1

我正在_ast做一些代码分析,但在获取导入函数的名称时遇到了问题。
假设我的代码文件 ( code.py) 如下所示:

import somemod
def foo():
    somemod.bar()

当我得到这个文件的 ast 时root = compile(open('codefile.py').read(), 'codefile.py', 'exec', _ast.PyCF_ONLY_AST),我可以得到这样的行调用somemod.bar

root.body[1].body[0]

这是一个_ast.Expr节点。
然后我希望能够somemod.bar通过查看这个节点来获得。但是,当我查看 时root.body[1].body[0].value.func.value.id,我得到了somemod。据我所知,我找不到获得barsomemod.bar

我错过了什么?我怎样才能到达bar

4

1 回答 1

1

它在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'
于 2013-01-16T17:07:44.890 回答