python - 如何从 Python 的 AST 中获取变量的类型?

标签 python types abstract-syntax-tree

假设我想从我从一些源代码生成的 AST 树中获取所有变量的类型——我该怎么做呢? 例如,假设在我的源代码中有类似 i = 5 的内容。我如何从抽象语法树中确定 i 的类型是整数?

我尝试了 type() 函数;但是,它在这种情况下不起作用。

最佳答案

正如其他帖子中所解释的,如果不对语法树进行大量分析,就没有简单的方法来实现这一点,python ast 模块没有提供任何工具。

您仍然可以使用 logilab 的 astng 1 ,它是 pylint 的基础 2并提供静态推理能力。

这是一个简单的例子:

from logilab.astng.builder import ASTNGBuilder
builder = ASTNGBuilder()
astng = builder.string_build('i = 1', __name__, '<string>')
assnode = astng['']
print [(inf.value, type(inf.value)) for inf in assnode.infer()]

当然,您必须挖掘 api 以获得更多现实生活中的用法。您仍然可以写信给 python-projects@lists.logilab.org 寻求帮助。

关于python - 如何从 Python 的 AST 中获取变量的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8425371/

相关文章:

python ssl eof发生违反协议(protocol),wantwritererror,zeroreturnerror

python - 下面的代码在cpython中做了什么?

syntax - F# 前向类型声明

c# - NRefactory AST Visitor,某些节点没有访问方法?

iterator - OCaml 树迭代器

java - ANTLR v4、JavaLexer 和 JavaParser 返回 null 作为解析树

python - 在 django 中向租户管理员隐藏公共(public)模型

python - 在python中检查相同类型的值

c++ - 自然算术 C++ 总是返回 1

enums - 枚举类型的 JAXB 元素