python静态代码检查

1. pep8标准

PEP 8为编写Python代码提供了一个风格指南。除了空格缩进、每行最大长度以及其他与代码布局有关的细节等基本规则之外,PEP 8还介绍了大部分代码库所遵循的命名约定。
在代码的静态检测中,pep8模块本重命名为pycodestyle

安装pep8:

$ pip install pep8
$ pip install pycodestyle

pycodestyle 分析代码

$ pycodestyle videos_concat.py
utils/videos_concat.py:16:80: E501 line too long (85 > 79 characters)
utils/videos_concat.py:34:80: E501 line too long (112 > 79 characters)
utils/videos_concat.py:40:80: E501 line too long (80 > 79 characters)
utils/videos_concat.py:41:80: E501 line too long (101 > 79 characters)
utils/videos_concat.py:42:80: E501 line too long (80 > 79 characters)
utils/videos_concat.py:43:80: E501 line too long (96 > 79 characters)
utils/videos_concat.py:44:80: E501 line too long (88 > 79 characters)
utils/videos_concat.py:55:80: E501 line too long (84 > 79 characters)
utils/videos_concat.py:56:80: E501 line too long (83 > 79 characters)
utils/videos_concat.py:57:80: E501 line too long (100 > 79 characters)
utils/videos_concat.py:59:80: E501 line too long (84 > 79 characters)
utils/videos_concat.py:65:80: E501 line too long (120 > 79 characters)
utils/videos_concat.py:79:80: E501 line too long (99 > 79 characters)
utils/videos_concat.py:98:80: E501 line too long (91 > 79 characters)

pep8这个工具只有一个目的:它仅提供对PEP 8代码约定的风格检查。这是它与Pylint的主要区别,后者具有许多额外的功能。对于那些仅对PEP 8标准的自动化代码风格检查感兴趣的程序员来说,这是最佳选择,不需要任何额外的工具配置

2. pylint

一个非常灵活的源代码分析器。
除了一些质量保证方面的度量之外,Pylint还允许你检查给定的源代码是否遵循某种命名约定。它的默认设置对应于PEP 8,Pylint脚本会提供一份shell报告输出。

安装pylint:

$ pip install pylint

pylint 分析代码:

$ pylint videos_concat.py 
No config file found, using default configuration
************* Module v_lambda.80_func_edit_overlay.utils.videos_concat
C: 34, 0: Line too long (112/100) (line-too-long)
C: 41, 0: Line too long (101/100) (line-too-long)
C: 65, 0: Line too long (120/100) (line-too-long)
C:  1, 0: Missing module docstring (missing-docstring)
E:  7, 0: Unable to import 'consts.const_path' (import-error)
E:  8, 0: Unable to import 'utils.ff_probe' (import-error)
E:  9, 0: Unable to import 'utils.audio_clip' (import-error)
C: 11, 0: Invalid constant name "logging" (invalid-name)
C: 14, 0: Missing function docstring (missing-docstring)
R: 14, 0: Too many local variables (28/15) (too-many-locals)
W:105,11: Catching too general exception Exception (broad-except)
C:105,24: Invalid variable name "e" (invalid-name)
W:106, 8: Specify string format arguments as logging function parameters (logging-not-lazy)
R: 14, 0: Too many branches (17/12) (too-many-branches)
R: 14, 0: Too many statements (69/50) (too-many-statements)

Report
======
79 statements analysed.

Statistics by type
------------------

+---------+-------+-----------+-----------+------------+---------+
|type     |number |old number |difference |%documented |%badname |
+=========+=======+===========+===========+============+=========+
|module   |1      |NC         |NC         |0.00        |0.00     |
+---------+-------+-----------+-----------+------------+---------+
|class    |0      |NC         |NC         |0           |0        |
+---------+-------+-----------+-----------+------------+---------+
|method   |0      |NC         |NC         |0           |0        |
+---------+-------+-----------+-----------+------------+---------+
|function |1      |NC         |NC         |0.00        |0.00     |
+---------+-------+-----------+-----------+------------+---------+



External dependencies
---------------------
::
    \-utils 
      \-util (user.test.utils.videos_concat)

Raw metrics
-----------

+----------+-------+------+---------+-----------+
|type      |number |%     |previous |difference |
+==========+=======+======+=========+===========+
|code      |87     |80.56 |NC       |NC         |
+----------+-------+------+---------+-----------+
|docstring |0      |0.00  |NC       |NC         |
+----------+-------+------+---------+-----------+
|comment   |2      |1.85  |NC       |NC         |
+----------+-------+------+---------+-----------+
|empty     |19     |17.59 |NC       |NC         |
+----------+-------+------+---------+-----------+

Duplication
-----------
+-------------------------+------+---------+-----------+
|                         |now   |previous |difference |
+=========================+======+=========+===========+
|nb duplicated lines      |0     |NC       |NC         |
+-------------------------+------+---------+-----------+
|percent duplicated lines |0.000 |NC       |NC         |
+-------------------------+------+---------+-----------+

Messages by category
--------------------
+-----------+-------+---------+-----------+
|type       |number |previous |difference |
+===========+=======+=========+===========+
|convention |7      |NC       |NC         |
+-----------+-------+---------+-----------+
|refactor   |3      |NC       |NC         |
+-----------+-------+---------+-----------+
|warning    |2      |NC       |NC         |
+-----------+-------+---------+-----------+
|error      |3      |NC       |NC         |
+-----------+-------+---------+-----------+


Messages
--------
+--------------------+------------+
|message id          |occurrences |
+====================+============+
|line-too-long       |3           |
+--------------------+------------+
|import-error        |3           |
+--------------------+------------+
|missing-docstring   |2           |
+--------------------+------------+
|invalid-name        |2           |
+--------------------+------------+
|too-many-statements |1           |
+--------------------+------------+
|too-many-locals     |1           |
+--------------------+------------+
|too-many-branches   |1           |
+--------------------+------------+
|logging-not-lazy    |1           |
+--------------------+------------+
|broad-except        |1           |
+--------------------+------------+

Global evaluation
-----------------
Your code has been rated at 6.58/10

注意,Pylint可能会给出不好的评分或抱怨。例如,import语句没有被模块本身的代码使用,这在某些情况下是完全可以的(使其在命名空间中可用)。

如果一个库采用混合大小写为方法命名,那么对其调用可能也会降低评分。无论如何,总体评价并不那么重要。Pylint只是一个工具,指出可能的改进之处。

要想对Pylint进行微调,第一件要做的事就是,使用-generate-rcfile选项在项目目录下创建一个.pylintrc配置文件

3. flake8

安装flake模块

$pip install pyflakes

pyflakes分析代码

$ pyflakes test.py 
发布了141 篇原创文章 · 获赞 107 · 访问量 30万+

猜你喜欢

转载自blog.csdn.net/ternence_hsu/article/details/103538414