【发布时间】:2017-04-25 21:00:18
【问题描述】:
我想用python的ast-functions分析以下部分:
extra_host_conf.setdefault('alias', []).extend( [(u'alias1', ['host1']), (u'alias2', ['host2']), (u'alias3', ['host3'])])
我需要来自 extend()-method-parameter 的列表。但是检查 setdefault() 方法中的字符串参数很重要:'alias'!还可以有另一个字符串参数作为“别名”。
我知道如何获取字符串 'alias' 并且我知道如何获取列表。但我不知道如何检查字符串然后获取列表:(
这就是我得到字符串“别名”的方式:
import ast
class MyVisitor(ast.NodeVisitor):
def visit_Call(self, node):
if node.func.attr == "setdefault":
print ast.literal_eval(node.args[0])
self.generic_visit(node)
这就是我获得列表的方式:
import ast
class MyVisitor(ast.NodeVisitor):
def visit_Call(self, node):
if node.func.attr == "extend":
print ast.literal_eval(node.args[0])
self.generic_visit(node)
但是如何将两者放在一起呢?比如:“如果字符串是‘别名’,请给我列表。”
我写了一些方法来获取不同部分的类型。我希望这可以帮助:
ast.literal: [(u'alias1', ['host1']), (u'alias2', ['host2']), (u'alias3', ['host3'])]
类型:调用属性:扩展
类型:属性ast.literal:别名
类型:调用属性:setdefault
类型:属性名称:extra_host_conf
类型:姓名字符串:别名
类型:Str
【问题讨论】:
标签: python abstract-syntax-tree