博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python静态代码检查
阅读量:4200 次
发布时间:2019-05-26

本文共 5982 字,大约阅读时间需要 19 分钟。

1. pep8标准

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标准的自动化代码风格检查感兴趣的程序员来说,这是最佳选择,不需要任何额外的工具配置

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_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配置文件

3. flake8

安装flake模块

$pip install pyflakes

pyflakes分析代码

$ pyflakes test.py

转载地址:http://nmfli.baihongyu.com/

你可能感兴趣的文章
初学Java必备基础知识,编程领域你需要掌握的关键点!
查看>>
阿里五年Java程序员的总结,献给还在迷茫中的你!
查看>>
程序员身上有异味,同事为什么都不会直接告诉他?
查看>>
Java、C、C+ +、PHP、Python分别用来开发什么?一篇文章告诉你!
查看>>
Linux-SHELL常用命令
查看>>
Linux-网络运维基础
查看>>
Verilog编程网站学习——门电路、组合电路、时序电路
查看>>
android——学生信息显示和添加
查看>>
Android——ImageSwitcher轮流显示动画
查看>>
Android——利用手机端的文件存储和SQLite实现一个拍照图片管理系统
查看>>
图像调优1:清晰度相关参数MTF,SFR,MTF50,MTF50P 以及TVL的概念以及换算说明
查看>>
罗永浩欲直播带货,京东说可以帮忙联系
查看>>
B站,正在变成下一个“公众号”?
查看>>
小米启动安心服务月 手机家电产品可免费清洁保养
查看>>
刘作虎:一加新品将全系支持 5G
查看>>
滴滴顺风车上线新功能,特殊时期便捷出行
查看>>
不会延期!iPhone 12S预计如期在9月发售:升级三星LTPO屏幕
查看>>
腾讯物联网操作系统TencentOS tiny线上移植大赛,王者机器人、QQ公仔、定制开发板等礼品等你来拿 !
查看>>
为云而生,腾讯云服务器操作系统TencentOS内核正式开源
查看>>
腾讯汤道生:开源已成为许多技术驱动型产业重要的创新推动力
查看>>