I'm working with the ast module to do some analysis on Python codebases, and once I've found what I'm looking for, I want to print something out. The file name I'm hanging onto externally, so that works; and the nodes all have a lineno. So far so good. But how do I "reconstitute" a subtree into something fit for human consumption?
Take this cut-down example: module = ast.parse("x[1] = 345+456") assign = list(ast.walk(module))[1] destination = assign.targets[0] At this point, destination is the subtree representing what's being assigned to. I can get a verbose dump of that: >>> print(ast.dump(destination)) Subscript(value=Name(id='x', ctx=Load()), slice=Index(value=Num(n=1)), ctx=Store()) but what I'd really like to do is get something that looks approximately like "x[1]". Is there an easy way to do that? Its str and repr aren't useful, and I can't see a "reconstitute" method on the node, nor a function in ast itself for the job. In theory I could write one, but it'd need to understand every node type, so it seems the most logical place would be on the node itself - maybe in __str__. Is there anything nice and easy? I don't care if it's not perfect, as long as it's more readable than ast.dump(). :) ChrisA -- https://mail.python.org/mailman/listinfo/python-list