如何用Python 3.x的ast模块解析Python 2.x?

10 投票
1 回答
2579 浏览
提问于 2025-04-30 15:27

我最近写了一个Sublime Text 3的插件,这个插件可以解析Python代码并从中提取一些统计信息。

其实也没什么复杂的,只是我发现Sublime Text 3使用的是Python 3.x,而显然ast模块也期望看到Python 3.x的代码。我查看了ast模块的文档,但没找到可以让我指定版本的选项。

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

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

暂无标签

1 个回答

8

不行,ast模块只能处理与它一起发布的Python版本的代码。这是因为在后台,它使用的是同一个解析器来把你的Python代码编译成字节码;ast模块只是给你提供了一个中间的抽象语法树(AST)。这个解析器没有“向后兼容”的模式。

如果你想解析不同版本的Python源代码,你需要自己实现一个解析器。看起来Jedi(一个Python自动补全库)就是走的这条路。

在查看SublimeCodeIntel的CodeIntel2打包时,我发现这个包的Python和Python 3解析器是基于SilverCity的,它有Python绑定。也许这个项目可以作为你自己项目的一个合适起点。

撰写回答