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模块:
扫描二维码关注公众号,回复:
10047026 查看本文章
$pip install pyflakes
pyflakes分析代码:
$ pyflakes test.py