1

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

例如,对于语句:

如果(分支 1 和分支 2):通过

我想要返回值 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

4

1 回答 1

0

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

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
于 2021-01-01T23:35:57.287 回答