我正在使用ast解析python文件,但我不知道如何获取ast.Subscript节点进行计算。我甚至不知道如何从中提取文本(所以我可以使用eval( text ) )。有人能看到我错过了什么吗?
例如,在这里,A arg的默认值是我要计算的表达式。Ast以ast.Subscript节点的形式返回默认值。我如何评估它呢?
import ast
import os
text = """
def test(A=os.environ["USER"][0]):
return A
"""
fnDef = ast.parse(text).body[0]
argDefault = fnDef.args.defaults[0]发布于 2014-12-23 22:40:57
使用ast.dump(node),您可以看到您的节点由什么组成。在你的例子中(缩进是我的):
print(ast.dump(fnDef))
> FunctionDef(name='test',
args=arguments(
args=[arg(arg='A', annotation=None)],
vararg=None,
varargannotation=None,
kwonlyargs=[],
kwarg=None,
kwargannotation=None,
defaults=[
Subscript(
value=Subscript(
value=Attribute(
value=Name(id='os', ctx=Load()),
attr='environ', ctx=Load()),
slice=Index(value=Str(s='USER')),
ctx=Load()),
slice=Index(value=Num(n=0)),
ctx=Load())],
kw_defaults=[]),
body=[Return(value=Name(id='A', ctx=Load()))],
decorator_list=[],
returns=None)如您所见,Subscript节点由一个值、一个切片和一个ctx组成。第一个切片(["USER"])是值为Str节点的索引,第二个([0])切片是值为Num节点的索引。
您也可以在切片中看到这一点(请参阅‘abstract grammar’类型)。
https://stackoverflow.com/questions/23550080
复制相似问题