Как извлечь аргументы из вызова с помощью ast pythonPython

Программы на Python
Anonymous
Как извлечь аргументы из вызова с помощью ast python

Сообщение Anonymous »

Я работаю над функцией для преобразования вызовов функций, поэтому мне нужны вызовы и параметры. Я возился с ast и могу извлечь определенные узлы, но почему-то не могу отличить узлы по их типу.
Например, я хочу получить вызов и параметр для выполнения моего преобразования в новом синтаксисеПример кода:
import ast
import argparse
def __init__(self):
self.arglist = []
def visit(self, node):
if isinstance(node, ast.Call):
print('VVVVVVVVVVVVVV CALL ANFANG VVVVVVVVVVVVVVVV')
print(f'_______ Call found ______')
super().visit(node)
print(f'Argumente: >>>{node.args.pop(0).__dict__} {node.value}')
return super().visit(node)

return super().visit(node)

tree = ast.parse('''
meat = get_mess(ONE, TWO, THREE)
name2 = 'Elise'
''')

print(ast.dump(tree))
vis = Visitor()
vis.visit(tree)```

Output is:

Module(body=[Assign(targets=[Name(id='meat', ctx=Store())], value=Call(func=Name(id='get_mess', ctx=Load()), args=[Name(id='ONE', ctx=Load()), Name(id='TWO', ctx=Load()), Name(id='THREE', ctx=Load())], keywords=[])), Assign(targets=[Name(id='name2', ctx=Store())], value=Constant(value='Elise'))], type_ignores=[])
_______ Name found ______
Name Argumente: meat
VVVVVVVVVVVVVV CALL ANFANG VVVVVVVVVVVVVVVV
_______ Call found ______
_______ Name found ______
Name Argumente: get_mess
_______ Name found ______
Name Argumente: ONE
_______ Name found ______
Name Argumente: TWO
_______ Name found ______
Name Argumente: THREE
Argumente: >>>{'id': 'ONE', 'ctx': , 'lineno': 2, 'col_offset': 16, 'end_lineno': 2, 'end_col_offset': 19}> Elise

It is extracting function calls (get_mess) and parameters (ONE, TWO, THREE) but i didnt found a way to extract them by their type so i can build new code.


Подробнее здесь: https://stackoverflow.com/questions/790 ... ast-python

Вернуться в «Python»