How to parse Python 2.x with Python 3.x ast module?

◇◆丶佛笑我妖孽 提交于 2020-06-10 03:35:12

问题


I recently wrote a Sublime Text 3 plugin that parses Python code and issues some stats from it.

Nothing too complex, except I noticed Sublime Text 3 uses Python 3.x and apparently the ast module expects to see Python 3.x code as well. I looked at the documentation for the ast module but couldn't find anything that allows me to specify the version.

Obviously this causes issues when parsing perfectly valid Python 2.7 code.

Is there a way to specify or somehow detect/guess the Python version ? Or to allow the parser to be more flexible ?


回答1:


No, the ast module can only handle Python code for the version of Python it is shipped with. That's because under the hood, the exact same parser is used to compile your Python code into byte code; all the ast module does is give you the intermediary AST tree. This parser has no 'backwards compatible' mode.

You'll need to implement your own parser if you want to parse different source code from Python versions. This certainly appears the path that Jedi (a Python autocompletion library) took.

Looking at the SublimeCodeIntel packaging of CodeIntel2, I see that that package bases its Python and Python 3 parsers on SilverCity, which has Python bindings. Perhaps that project would be a suitable starting point for your own.



来源:https://stackoverflow.com/questions/26655818/how-to-parse-python-2-x-with-python-3-x-ast-module

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!