如何使用Astroid获取if语句中的条件数



我正在使用Python的Astroid包进行Pylint项目。我想知道是否有一种通用而方便的方法可以使用Astroid 检索if语句的条件分支的数量

例如,对于语句:

if(branch1和branch2(:通过

我想要返回的值2。

我发现了一种使用astroid:的天真方法

def _has_one_condition(node):
return isinstance(node, astroid.Compare)

def _has_2_conditions(node):

return (
isinstance(node, astroid.BoolOp)
and len(node.values) == 2
and isinstance(node.values[0], astroid.Compare)
and isinstance(node.values[1], astroid.Compare)
)

我正在寻找一种更通用的方法来使用astroid

这是一种计算if语句分支数的方法。确保作为节点传递的参数是if astroid node.test属性。

def num_of_condition_branches(node):
if isinstance(node, astroid.BoolOp):
return _num_of_condition_branches_helper(node,0)
return 1

def _num_of_condition_branches_helper(node,branches):
for child in node.get_children():
if not isinstance(child, astroid.BoolOp):
branches+=1
else:
branches=_num_of_condition_branches_helper(child,branches)
return branches

最新更新