本文共 5982 字,大约阅读时间需要 19 分钟。
PEP 8为编写Python代码提供了一个风格指南。除了空格缩进、每行最大长度以及其他与代码布局有关的细节等基本规则之外,PEP 8还介绍了大部分代码库所遵循的命名约定。
在代码的静态检测中,pep8模块本重命名为pycodestyle安装pep8:
$ pip install pep8$ pip install pycodestyle
pycodestyle 分析代码:
$ pycodestyle videos_concat.pyutils/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标准的自动化代码风格检查感兴趣的程序员来说,这是最佳选择,不需要任何额外的工具配置
一个非常灵活的源代码分析器。
除了一些质量保证方面的度量之外,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_concatC: 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配置文件
安装flake模块:
$pip install pyflakes
pyflakes分析代码:
$ pyflakes test.py
转载地址:http://nmfli.baihongyu.com/