Suppose I have the following string:
code = """
if 1 == 1 and 2 == 2 and 3 == 3:
test = 1
"""
The following code converts that string in a AST.
ast.parse(code)
Then I have a tree like:
Module(body=[<_ast.If object at 0x100747358>])
If(test=BoolOp(op=And(), values=[<_ast.Compare object at 0x100747438>, <_ast.Compare object at 0x100747a90>, <_ast.Compare object at 0x100747d68>]), body=[<_ast.Assign object at 0x100747e48>], orelse=[])
I want to know if there is a way to convert the object at.If
into the string if 1 == 1 and 2 == 2 and 3 == 3:
I know it can be done traversing the children node, but it's getting too complicated that way.
You can use the astunparse library which was basically just code from the core, repackaged individually.
First, install the library:
pip install astunparse
Then, run your AST module through it to get the source right back. So running:
import ast
import astunparse
code = """
if 1 == 1 and 2 == 2 and 3 == 3:
test = 1
"""
node = ast.parse(code)
astunparse.unparse(node)
Will output:
'\nif ((1 == 1) and (2 == 2) and (3 == 3)):\n test = 1\n'