Целью является определение встроенной функции, например eval()
, в некотором коде.Как найти/определить, используется ли встроенная функция в Python AST?
def foo(a):
eval('a = 2')
Я попытался следующий подход:
ex_ast = ast.parse(inspect.getsource(foo))
for node in ast.walk(ex_ast):
if isinstance(node, ast.FunctionDef):
print(node.name)
Имя функции foo
печатается как выход.
Я знаю, что встроенные функции не имеют конструкторов. Они находятся в модуле type
. Таким образом, 1 подход будет использовать types.FunctionType
в вызове isinstance
.
Но так как я использую узлы AST. Они не могут быть преобразованы обратно в код. Я должен проверить для каждого узла, если они types.FunctionType
:
for node in ast.walk(ex_ast):
if isinstance(node, ast.FunctionType):
print(node.name)
Я получил эти ошибки:
AttributeError: module 'ast' has no attribute 'FunctionType'
Как я должен правильно определить, если конкретный Buildin функция используется в коде? Благодаря!
«Я знаю, что встроенные функции не имеют конструкторов. Они находятся в модуле' type'. - вы серьезно неправильно поняли здесь. – user2357112
@ user2357112 Я узнал, что отсюда [ссылка] (http://stackoverflow.com/questions/624926/how-to-detect-whether-a-python-variable-is-a-function), можете ли вы объяснить, что дальше если вы уверены? благодаря! – HayleyL
Этот ответ говорит о том, что нет встроенной функции, которую вы вызываете для создания функций, и что объект типа, представляющий тип функций, доступен в модуле 'types'. Вы взяли слова и создали похожие, но неправильные предложения из них. – user2357112