ast
それ自体で評価できるがast.literal_eval
、リスト内包表記などには十分なリテラルではないノードが与えられた場合
src = '[i**2 for i in range(10)]'
a = ast.parse(src)
今a.body[0]
はast.Expr
とa.body[0].value
ですast.ListComp
。結果のリストを取得したいのですが、ノードeval(src)
のみが与えられます。ast.Expr
ast
それ自体で評価できるがast.literal_eval
、リスト内包表記などには十分なリテラルではないノードが与えられた場合
src = '[i**2 for i in range(10)]'
a = ast.parse(src)
今a.body[0]
はast.Expr
とa.body[0].value
ですast.ListComp
。結果のリストを取得したいのですが、ノードeval(src)
のみが与えられます。ast.Expr
おそらくあなたは探してい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]