擅长:python、mysql、java
<p>我们有类似的需求,为此我创建了<a href="https://github.com/gristlabs/asttokens" rel="noreferrer">asttokens</a>库。它以文本和标记化的形式维护源代码,并用标记信息标记AST节点,从中也可以随时获得文本。在</p>
<p>它适用于python2和python3(用2.7和3.5测试)。例如:</p>
<pre><code>import ast, asttokens
st='''
def greet(a):
say("hello") if a else say("bye")
'''
atok = asttokens.ASTTokens(st, parse=True)
for node in ast.walk(atok.tree):
if hasattr(node, 'lineno'):
print atok.get_text_range(node), node.__class__.__name__, atok.get_text(node)
</code></pre>
<p>印刷品</p>
^{pr2}$