я хочу проанализировать следующую часть с помощью ast-функций python:
extra_host_conf.setdefault('alias', []).extend( [(u'alias1', ['host1']), (u'alias2', ['host2']), (u'alias3', ['host3 '])])
Мне нужен список из параметра метода extend(). Но важно проверить строковый параметр из метода setdefault(): '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'])]
Тип: CallАтрибут: extend
Тип: Атрибутast.literal: псевдоним
Тип: ЗвонокАтрибут: setdefault
Тип: АтрибутИмя: extra_host_conf
Тип: ИмяСтрока: псевдоним
Тип: Str