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

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

Сообщение Anonymous »

Я работаю над функцией для преобразования вызовов функций, поэтому мне нужны вызовы и параметры. Я повозился с AST и могу извлечь конкретные узлы, но почему-то не могу отличить узлы по их типу.
Например, я хочу получить вызов и параметры для преобразования моего преобразования в новый синтаксис.
Пример кода:

Код: Выделить всё

import ast
import argparse

class Visitor(ast.NodeVisitor):
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)
Вывод:

Код: Выделить всё

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
Он извлекает вызовы функций (get_mess) и параметры (ONE, TWO, THREE), но я не нашел способа извлечь их по типу, поэтому могу создать новый код .

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

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