2014-10-30 110 views
6

我最近编写了一个Sublime Text 3插件,用于解析Python代码并从中发布一些统计信息。如何使用Python 3.x ast模块解析Python 2.x?

没什么太复杂的,除非我注意到Sublime Text 3使用Python 3.x,并且显然ast module预计也会看到Python 3.x代码。我查看了ast module的文档,但找不到任何可以指定版本的文档。

显然这在解析完全有效的Python 2.7代码时会引发问题。

有没有指定或以某种方式检测/猜Python版本的方法吗?或者让解析器更灵活?

回答

6

没有,ast模块只能处理Python代码为Python的版本,它附带。这是因为在底层,完全相同的解析器用于将您的Python代码编译为字节码;所有ast模块所做的就是给你中介AST树。此解析器没有“向后兼容”模式。

,如果你想从Python版本解析不同的源代码,您需要实现自己的解析器。这肯定会出现Jedi(Python自动完成库)所采用的路径。

看看SublimeCodeIntel packaging of CodeIntel2,我发现该软件包的Python和Python 3解析器基于SilverCity,它具有Python绑定。也许这个项目将是你自己的一个合适的起点。