首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python/ast:评估ast.Subscript节点

python/ast:评估ast.Subscript节点
EN

Stack Overflow用户
提问于 2014-05-09 02:45:21
回答 1查看 733关注 0票数 0

我正在使用ast解析python文件,但我不知道如何获取ast.Subscript节点进行计算。我甚至不知道如何从中提取文本(所以我可以使用eval( text ) )。有人能看到我错过了什么吗?

例如,在这里,A arg的默认值是我要计算的表达式。Ast以ast.Subscript节点的形式返回默认值。我如何评估它呢?

代码语言:javascript
复制
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]
EN

回答 1

Stack Overflow用户

发布于 2014-12-23 22:40:57

使用ast.dump(node),您可以看到您的节点由什么组成。在你的例子中(缩进是我的):

代码语言:javascript
复制
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’类型)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23550080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档