所以我有这个文件:
>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节点。你能帮我在这里做错什么吗?
谢谢!
答案 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)