有没有一种方法(最好使用ast模块)来知道函数是否具有所需数量的参数?在
例如,如果一个用户界面允许用户插入一个python表达式,例如“sum(x)”,但用户错误地键入了“sum()”,有没有办法在运行前验证该表达式?在
我已经打过电话了ast.转储在符号树中的每个节点上,但是这些符号的信息似乎不足以进行这种分析?在
例如:
#own debug code added to ast.py
def visit(self, node):
print(dump(node),True, False)
method = 'visit_' + node.__class__.__name__
visitor = getattr(self, method, self.generic_visit)
return visitor(node)
产量:
^{pr2}$它与print()等不需要特定数量参数的函数没有什么区别。在
您无法从调用表达式中看到可调用期望的参数。Python在运行时将这完全交给可调用的。在
对于静态代码分析,您唯一的选择是解析可调用的(希望它在本质上不是太动态的,例如在运行时会发生变化),对于C定义的对象,有自己的签名数据库。这是Komodo CodeIntel库采用的路径(OSS,用于其他项目,如SublimeCodeIntel)。CIX files支持基于C的扩展,它本质上包含可调用的签名。在
在运行时,您可以使用^{} 来检查调用签名。目前只部分支持C函数,只有使用参数诊所的函数才存储签名信息,请参见What are __signature__ and __text_signature__ used for in Python 3.4
相关问题 更多 >
编程相关推荐