eval()
目标是检测是否在某些代码中使用了诸如此类的内置函数。
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
模块中。因此,一种方法将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'
我应该如何正确识别代码中是否使用了特定的内置函数?谢谢!