5

astそれ自体で評価できるがast.literal_eval、リスト内包表記などには十分なリテラルではないノードが与えられた場合

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

a.body[0]ast.Expra.body[0].valueですast.ListComp。結果のリストを取得したいのですが、ノードeval(src)のみが与えられます。ast.Expr

4

1 に答える 1

5

おそらくあなたは探していcompile()ますか?AST オブジェクトを呼び出しcompile()た結果は、 に渡すことができるコード オブジェクトです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]
于 2012-05-25T02:52:58.000 に答える