Python 如何使用Astroid获取if语句中的条件数?
我正在使用Astroid Python包进行Pylint项目。 我想知道是否有一种通用且方便的方法可以使用Astroid检索if语句的条件分支数 例如,对于声明: 如果(分支1和分支2): 通过 我想要返回值2 我发现了一种使用astroid的天真方法:Python 如何使用Astroid获取if语句中的条件数?,python,pylint,astroid,Python,Pylint,Astroid,我正在使用Astroid Python包进行Pylint项目。 我想知道是否有一种通用且方便的方法可以使用Astroid检索if语句的条件分支数 例如,对于声明: 如果(分支1和分支2): 通过 我想要返回值2 我发现了一种使用astroid的天真方法: def _has_one_condition(node): return isinstance(node, astroid.Compare) def _has_2_conditions(node):
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语句分支数的方法。确保作为节点传递的参数是
.test
属性的if 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
这是一种计算if语句分支数的方法。确保作为节点传递的参数是
.test
属性的if 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
if
语句只接受一个条件。此条件可能由任何类型的表达式组成,该表达式在任何数量的嵌套级别中具有任意数量的运算符,有递归或无递归。该如何计算呢?我编辑了这个问题-我想编写一个函数,使用astroid
包返回条件中的分支数。if
语句只接受一个条件。此条件可能由任何类型的表达式组成,该表达式在任何数量的嵌套级别中具有任意数量的运算符,有递归或无递归。该如何计算呢?我编辑了这个问题-我想编写一个函数,使用astroid
包返回某个条件下的分支数。