Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert ast node into python object

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.

like image 383
Kyss Tao Avatar asked May 25 '12 02:05

Kyss Tao


1 Answers

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]
like image 109
Amber Avatar answered Sep 19 '22 21:09

Amber