python如何实现代码检查


Posted in Python onJune 28, 2019

前言

通常我们的python代码都是遵循PEP8的规范化格式,目的是为了保持代码的一致性、可读性。,这里给大家推荐几个常用的静态代码检查工具,大家可以酌情选择使用

1. pylint

Pylint是一个Python静态代码分析工具,它可以查找编程错误,帮助强制执行编码标准,嗅探代码异味并提供简单的重构建议。

它具有高度可配置性,具有特殊的编译指示来控制代码中的错误和警告,以及广泛的配置文件。也可以编写自己的插件来添加自己的检查或以某种方式扩展pylint。

缺省情况下,PyLint 启用许多规则。它具有高度可配置性,从代码内部处理程序控制它。另外,编写插件添加到自己的检查中是可能的。

安装

pip install pylint
#如果您使用的是Python 3.6+,请升级以获得对您的版本的完全支持:
pip install pylint --upgrade
#如果要从源分发版安装,请解压缩tarball并运行以下命令
python setup.py install

文档

Pylint附带以下附加命令:

  • pyreverse:一个UML图生成器
  • symilar:一个独立的相似性检查器
  • epylint:Emacs和Flymake兼容的Pylint

使用

 pylint的各种引用以及使用方式都可以去文档查找,这里仅介绍一下比较基础简单的示例

pylint [options] modules_or_packages

命令行选项

参数 含义
--version 显示程序的版本号并退出
-h, --help 显示有关命令行选项的帮助
--ignore= 将文件或目录添加到黑名单。它们应该是基本名称,而不是路径。
--output-format= 选择输出格式(文本,json,自定义)。
--list-msgs 生成pylint的消息。

错误代码含义

  • C:惯例,违反了编码风格标准
  • R:重构,代码非常糟糕
  • W:警告,某些 Python 特定的问题
  • E:错误,很可能是代码中的错误
  • F:致命错误,阻止 Pylint 进一步运行的错误

更多pylint相关可参考文档

2. yapf:

Python的大多数当前格式化程序 - 例如,autopep8和pep8ify ---用于从代码中删除lint错误。这有一些明显的局限性。例如,符合PEP 8指南的代码可能无法重新格式化。但这并不意味着代码看起来很好。

YAPF采用不同的方法。它基于由Daniel Jasper开发的'clang-format'。从本质上讲,算法会获取代码并将其重新格式化为符合样式指南的最佳格式,即使原始代码没有违反样式指南。这个想法也类似于Go编程语言的'gofmt'工具:结束所有关于格式化的神圣战争

如果项目的整个代码库只是通过YAPF进行修改,只要进行修改,样式在整个项目中保持一致,并且没有必要在每次代码审查中争论风格。

最终目标是YAPF生成的代码与程序员在遵循样式指南时编写的代码一样好。它消除了维护代码的一些苦差事。
安装

pip install yapf

使用

yapf [-h] [-v] [-d | -i] [-r | -l START-END] [-e PATTERN]
[--style STYLE] [--style-help] [--no-local-style] [-p]
[-vv]
[files [files ...]]

同上,一样也可以直接跟文件进行操作

参数 参数说明
-h, --help 显示此帮助消息并退出
-v, --version 显示版本号并退出
-d, --diff 比较差异
-i, --in-place 对文件进行更改
-r, --recursive 以递归方式运行目录

示例

#直接跟文件名(并不修改文件)
yapf <python file>
#格式化前后对比
yapf -d <python file>
#直接修改源文件
yapf -i <python file>
#导出配置文件
yapf --style-help > style.cfg
#并发格式化多个文件,需要futures模块支持
yapf -pi *.py

更多yapf相关可参考yapf

其他的此类工具还有Pyflakes,flake8等等,小编直接出到这两个常用的,更多内容大家在项目实战中应该会有更多接触

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python检测远程udp端口是否打开的方法
Mar 14 Python
Python单链表简单实现代码
Apr 27 Python
Python爬取网易云音乐热门评论
Mar 31 Python
python实现n个数中选出m个数的方法
Nov 13 Python
python pygame模块编写飞机大战
Nov 20 Python
基于Python在MacOS上安装robotframework-ride
Dec 28 Python
python去重,一个由dict组成的list的去重示例
Jan 21 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
Python字符串对象实现原理详解
Jul 01 Python
pandas按行按列遍历Dataframe的几种方式
Oct 23 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
python射线法判断一个点在图形区域内外
Jun 28 #Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 #Python
如何使用Python 打印各种三角形
Jun 28 #Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 #Python
python 列表转为字典的两个小方法(小结)
Jun 28 #Python
numpy和pandas中数组的合并、拉直和重塑实例
Jun 28 #Python
使用Python画股票的K线图的方法步骤
Jun 28 #Python
You might like
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
PHP钩子与简单分发方式实例分析
2017/09/04 PHP
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
ionic实现可滑动的tab选项卡切换效果
2020/04/15 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
vue脚手架搭建项目的兼容性配置详解
2018/07/17 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
python更新列表的方法
2015/07/28 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
python实现图片批量压缩程序
2018/07/23 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
Python爬虫 urllib2的使用方法详解
2019/09/23 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
中国制造网:Made-in-China.com
2019/10/25 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
优良学风班申请材料
2014/02/13 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
检察院起诉书
2015/05/20 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
Python OpenCV实现图像模板匹配详解
2022/04/07 Python