Convert ast node into python object

2019-07-07 06:06发布

问题:

Given an ast node that can be evaluated by itself, but is not literal enough for ast.literal_eval e.g. a list comprehension

src = '[i**2 for i in range(10)]'
a = ast.parse(src)

Now a.body[0] is an ast.Expr and a.body[0].value an ast.ListComp. I would like to obtain the list that eval(src) would result, but given only the ast.Expr node.

回答1:

Perhaps you're looking for compile()? The result of calling compile() on an AST object is a code object that can be passed to eval().


>>> src = '[i**2 for i in range(10)]'
>>> b = ast.parse(src, mode='eval')
>>> eval(compile(b, '', 'eval'))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]