【问题标题】:How can I analyze Python code to identify problematic areas?如何分析 Python 代码以识别有问题的区域?
【发布时间】:2010-09-11 03:32:08
【问题描述】:

我有一个跨多个项目的大型源存储库。我想生成一份关于源代码运行状况的报告,确定需要解决的问题领域。

具体来说,我想调用具有高圈复杂度的例程,识别重复,并可能运行一些类似于 lint 的静态分析来发现可疑(因此可能是错误的)构造。

我该如何构建这样的报告?

【问题讨论】:

    标签: python static-analysis cyclomatic-complexity


    【解决方案1】:

    对于静态分析,有pylintpychecker。我个人使用 pylint,因为它似乎比 pychecker 更全面。

    对于圈复杂度,你可以试试this perl program,或者这个article,它引入了一个python程序来做同样的事情

    【讨论】:

      【解决方案2】:

      感谢Pydev,您可以非常轻松地在Eclipse IDEintegrate pylint,并在每次保存修改后的文件时获取代码报告。

      【讨论】:

        【解决方案3】:

        对于测量圈复杂度,traceback.org 提供了一个不错的工具。该页面还很好地概述了如何解释结果。

        pylint+1。它非常适合验证对编码标准的遵守情况(无论是 PEP8 还是您自己组织的变体),这最终有助于降低圈复杂度。

        【讨论】:

        • traceback.org 链接断开
        • Pylint 很棒,但速度很慢。我们用作 pre-push 钩子,但使用 flake8 和一堆插件进行定期检查和 pre-commit 钩子。这些天我实际上推荐https://flakehell.readthedocs.io/config.html,因为它的执行模型更加健壮和可配置。
        【解决方案4】:

        有一个工具叫 CloneDigger帮助你找到类似的代码sn-ps。

        【讨论】:

        • 它不适用于 Python 3,并且从未得到很好的维护。
        【解决方案5】:

        当您需要了解一个新项目时,Pycana 就像魅力一样!

        PyCAna(Python 代码分析器)是 一个简单代码的花哨名称 用于创建一个 执行后的类图 代码。

        看看它是如何工作的: http://pycana.sourceforge.net/

        输出:

        【讨论】:

          【解决方案6】:

          对于圈复杂度,您可以使用radonhttps://github.com/rubik/radon

          (使用pip安装:pip install radon

          此外,它还具有以下功能:

          • 原始指标(包括 SLOC、注释行、空白行等)
          • Halstead 指标(全部)
          • 可维护性索引(Visual Studio 中使用的索引)

          【讨论】:

          • 获取 Halstead 指标的开关是什么?
          • @qarma 如果我了解文档,我认为您不能使用命令行。您必须使用 Python API。
          【解决方案7】:

          使用flake8,它在一个工具中提供了pep8、pyflakes和圈复杂度分析

          【讨论】:

            【解决方案8】:

            为了检查圈复杂度,当然有mccabe 包。

            安装:

            $ pip install --upgrade mccabe
            

            用法:

            $ python -m mccabe --min=6 path/to/myfile.py
            

            注意上面的阈值 6。根据this answer,>5 的分数可能应该被简化。

            --min=3 的示例输出:

            68:1: 'Fetcher.fetch' 3
            48:1: 'Fetcher._read_dom_tag' 3
            103:1: 'main' 3
            

            也可以选择通过pylint-mccabepytest-mccabe等方式使用。

            【讨论】:

              猜你喜欢
              • 2015-02-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-07-27
              • 1970-01-01
              • 2021-10-10
              • 1970-01-01
              相关资源
              最近更新 更多