如何使用 Astroid 获取 if 语句中的条件数?
How to get number of conditions in if statement using Astroid?
我正在为 Python 使用 Astroid 包开发 Pylint 项目。
我想知道是否有一种通用且方便的方法来使用 Astroid
检索 if 语句的条件分支数
例如,对于语句:
if (branch1 and branch2):
pass
我要返回值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
我正在为 Python 使用 Astroid 包开发 Pylint 项目。 我想知道是否有一种通用且方便的方法来使用 Astroid
检索 if 语句的条件分支数例如,对于语句:
if (branch1 and branch2): pass
我要返回值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