如何在交互式Shell中使用ast.parse()解析文件

时间:2018-12-02 19:58:58

标签: python python-3.x

所以我有这个文件:

>cat ~/tmp/junk.py
def foo(a, b, c = 100):
    return a + b + c

z = foo(10, 20)
print(z)

然后在Python3.7交互式外壳中:

>>> import ast
>>> root=ast.parse("", "~/tmp/junk.py")
>>> ast.dump(root)
'Module(body=[])'
>>> for node in ast.walk(root):
...   ast.dump(node)
... 
'Module(body=[])'

我的目标是检查函数参数a,b和c的AST节点。你能帮我在这里做错什么吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您应该传递ast.parse您要解析的实际源代码,而不是空字符串:

with open(filename) as f:
    tree = ast.parse(f.read(), filename=filename)

答案 1 :(得分:1)

第一个参数应包含代码文本。第二个参数仅在此处用于清除错误消息。

您应该阅读文件并传递缓冲区:

filename = "~/tmp/junk.py"
with open(filename) as f:
   contents = f.read()
root=ast.parse(contents, filename)