Python源文件中的语句计数

Python源文件中的语句计数,python,Python,对于任何事情来说,代码行都是一个糟糕的度量,原因在此未讨论。但是,有没有一种简洁的方法来计算Python源代码文件中的语句 计算物理代码行,而不是我发现给出合理数字的本地代码行。计算物理代码行,而不是我发现给出合理数字的本地代码行。使用ast模块从Python代码解析和构造语法树。您将能够基于该树和节点应用所需的自定义计数算法。使用ast模块从Python代码解析和构造语法树。您将能够基于该树和节点应用所需的自定义计数算法。pylint在其输出报告中直接给出: pylint main.py

对于任何事情来说,代码行都是一个糟糕的度量,原因在此未讨论。但是,有没有一种简洁的方法来计算Python源代码文件中的语句

计算物理代码行,而不是我发现给出合理数字的本地代码行。

计算物理代码行,而不是我发现给出合理数字的本地代码行。

使用ast模块从Python代码解析和构造语法树。您将能够基于该树和节点应用所需的自定义计数算法。

使用ast模块从Python代码解析和构造语法树。您将能够基于该树和节点应用所需的自定义计数算法。

pylint在其输出报告中直接给出:

  pylint main.py 

  ...

  Report
  ======
  145 statements analysed.

pylint在其输出报告中直接给出:

  pylint main.py 

  ...

  Report
  ======
  145 statements analysed.

虽然这是一个老帖子。下面是一段代码,它以与PyLint相同的方式对python源文件中的语句进行计数

from astroid import MANAGER
# Tested with astroid 2.3.0.dev0

class ASTWalker:
    """
    Class to walk over the Astroid nodes
    """
    def __init__(self):
        self.nbstatements = 0

    def walk(self, astroid_node):
        """
        Recurse in the astroid node children and count the statements.
        """
        if astroid_node.is_statement:
            self.nbstatements += 1

        # recurse on children
        for child in astroid_node.get_children():
            self.walk(child)

walker = ASTWalker()
ast_node = MANAGER.ast_from_file("/my/file/name", source=True)
walker.walk(ast_node)

print(walker.nbstatements)

虽然这是一个老帖子。下面是一段代码,它以与PyLint相同的方式对python源文件中的语句进行计数

from astroid import MANAGER
# Tested with astroid 2.3.0.dev0

class ASTWalker:
    """
    Class to walk over the Astroid nodes
    """
    def __init__(self):
        self.nbstatements = 0

    def walk(self, astroid_node):
        """
        Recurse in the astroid node children and count the statements.
        """
        if astroid_node.is_statement:
            self.nbstatements += 1

        # recurse on children
        for child in astroid_node.get_children():
            self.walk(child)

walker = ASTWalker()
ast_node = MANAGER.ast_from_file("/my/file/name", source=True)
walker.walk(ast_node)

print(walker.nbstatements)

那么你想排除什么呢?空行和注释?所有注释,包括docstring?对应用程序控制流没有意义的所有内容-空行、注释等,也包括在内;分开的语句。可能重复:我认为语句/表达式的数量与代码行的数量一样具有误导性……那么您想排除什么呢?空行和注释?所有注释,包括docstring?对应用程序控制流没有意义的所有内容-空行、注释等,也包括在内;分开的陈述。可能重复:陈述/表达的数量与代码行的数量一样具有误导性…是的,但这个数字是无用的,因此它不是进行对话的正确位置为什么是useless@MikkoOhtamaa相反,如果你要抱怨解决方案,你最好给出一些理由。是的,但这个数字是无用的,所以它不是一个合适的地方来讨论为什么它是useless@MikkoOhtamaa相反,如果你要抱怨解决方案,你最好给出一些理由。有没有办法从Pylint获得唯一的语句计数?Pylint-reports=y main.py将显示所有消息以及语句计数。是否有任何方法仅从Pylint获取语句计数?Pylint-reports=y main.py将显示所有消息以及语句计数。