Python静态检查工具

Python是一门动态语言。在给python传参数的时候并没 有严格的类型限制。写python程序的时候,发现错误经常只能在执行的时候发现。有一些 错误由于隐藏的比较深,只有特定逻辑才会触发,往往导致需要花很多时间才能将语法错误慢慢排查出来。其实有一些错误是很明显的,假如能在写程序的时候发现这些错误,就能提高工作效率。

注:习惯了C/C++等编译语言,使用像Python这种动态语言,总有点不放心,特别是搭建比较大的系统的时候。Python静态语法检查工具就出现了。

Pyflakes(错误检查利器)

Pyflakes的下载地址:https://pypi.python.org/pypi/pyflakes

一个用于检查Python源文件错误的简单程序。

Pyflakes分析程序并且检查各种错误。它通过解析源文件实现,无需导入它,因此在模块中使用是安全的,没有任何的副作用。它也相当的快。

安装

快速安装方法:pip installpyflakes

你可以有两种方式使用Pyflakes:

命令行使用

命令行用法:

pyflakes *.py

VIM配置

第二种方式:VIM编辑器的配置,首先Vim必须支持Python,VIM是否支持Python使用下面的方式检查。

vim

#进入vim编辑器界面之后,在命令行模式下输入如下命令

:version

VIM - Vi IMproved 7.3 (2010Aug 15, compiled Oct 27 2010 17:51:38)

MS-Windows 32 位控制台版本

包含补丁: 1-46

编译者 [email protected]

大型版本 无图形界面。  可使用(+)与不可使用(-)的功能:

+arabic +autocmd-balloon_eval -browse ++builtin_terms +byte_offset +cindent

+clientserver +clipboard+cmdline_compl +cmdline_hist +cmdline_info +comments

+conceal +cryptv +cscope+cursorbind +cursorshape +dialog_con +diff +digraphs -dn

-ebcdic +emacs_tags +eval+ex_extra +extra_search +farsi +file_in_path

+find_in_path +float+folding -footer +gettext/dyn -hangul_input +iconv/dyn

+insert_expand +jumplist+keymap +langmap +libcall +linebreak +lispindent +listcm

+localmap -lua +menu +mksession +modify_fname+mouse -mouseshape +multi_byte

+multi_lang -mzscheme-netbeans_intg -osfiletype +path_extra -perl +persistent_un

-postscript +printer -profile -python -python3+quickfix +reltime +rightleft -ru

+scrollbind +signs +smartindent -sniff+startuptime +statusline -sun_workshop

+syntax +tag_binary+tag_old_static -tag_any_white -tcl -tgetent -termresponse

+textobjects +title -toolbar+user_commands +vertsplit +virtualedit +visual

+visualextra +viminfo+vreplace +wildignore +wildmenu +windows +writebackup

-xfontset -xim -xterm_save-xpm_w32

其中,+号代表支持,-号表示不支持。因此上面的vim不支持python,那么你需要升级你们的vim啦!下面我们对vim进行配置,使其支持pyflakes。

首先,下载pyflakes.vim,将其解压到vim的配置文件夹,例如:直接拷贝到/etc/vim/文件夹下面。

然后,修改vim的配置,打开vimrc,配置如下选项:

ifhas("autocmd")

filetype plugin indent on

endif

flake8(代码规范利器)

概述

flake8是下面三个工具的封装:

1)PyFlakes

2)Pep8

3)NedBatchelder’s McCabe script

Flake8的下载地址:https://pypi.python.org/pypi/flake8,优点是可扩展。

Flake8通过启动单独的flake8脚本运行所有工具,它在一个Per文件中显示告警,合并到输出中。

也增加一些特征:

1)包含这行文件将被忽略:#flake8: noqa

2)结尾包含#noqa注释的行将不发布告警

3)GIT和Mercurial钩子

4)McCabe复杂度检查器

5)可以通过flake8.extension入口点扩展

安装

下载源码后解压缩进行安装:pythonsetup.py install

快速安装:pipinstall flake8

使用

为了运行flake8只需在任意目录或Python模块上调用它。

$ flake8 coolproject

coolproject/mod.py:97:1: F401 ‘shutil‘imported but unused

coolproject/mod.py:625:17: E225 missingwhitespace around operato

coolproject/mod.py:729:1: F811 redefinitionof function ‘readlines‘ from line 723

coolproject/mod.py:1028:1: F841 localvariable ‘errors‘ is assigned to but never used

PyFlakes和Pep8(和可选的插件)的输出将合并起来一起返回。

Flake8提供一个扩展选项:--max-complexity,如果函数的McCabe复杂度比给定的值更高将发出一个告警。缺省它是不激活的。

$ flake8 --max-complexity 12 coolproject

coolproject/mod.py:97:1: F401 ‘shutil‘imported but unused

coolproject/mod.py:625:17: E225 missingwhitespace around operator

coolproject/mod.py:729:1: F811 redefinitionof unused ‘readlines‘ from line 723

coolproject/mod.py:939:1: C901‘Checker.check_all‘ is too complex (12)

coolproject/mod.py:1028:1: F841 localvariable ‘errors‘ is assigned to but never used

coolproject/mod.py:1204:1: C901 ‘selftest‘is too complex (14)

该特征对于检查非常复杂的代码相当有用。根据McCabe,低于10的任何代码都太复杂了。

VIM配置

如果希望在Vim中使用flake8,使用vundle进行安装。

" Flake8 plugin for Vim.

Bundle ‘nvie/vim-flake8‘

" compiler plugin for python stylechecking tool.

Bundle ‘vim-scripts/pylint.vim‘

autocmd FileType python compiler pylint

vundle的官方网址:https://github.com/gmarik/vundle

简单可用的vimrc,下载方法如下:

git clone https://github.com/icocoa/icocoa-vimrc.git--recursive vimrc // icocoa is my another account in GitHub

Pychecker

官方网址:http://pychecker.sourceforge.net/

http://sourceforge.net/projects/pychecker/

https://pypi.python.org/pypi/PyChecker

概述

PyChecker是Python代码的静态分析工具,它能够帮助查找Python代码的bug,而且能够对代码的复杂度和格式等提出警告。

PyChecker可以工作在多种方式之下。首先,PyChecker会导入所检查文件中包含的模块,检查导入是否正确,同时检查文件中的函数、类和方法等。

PyChecker可以检查出来的问题有如下几种:

1)全局量没有找到,比如没有导入模块

2)传递给函数、方法、构造器的参数数目错误

3)传递给内建函数和方法的参数数目错误

4)字符串格式化信息不匹配

5)使用不存在的类方法和属性

6)覆盖函数时改变了签名

7)在同一作用域中重定义了函数、类、方法

8)使用未初始化的变量

9)方法的第一个参数不是self

10)未使用的全局量和本地量(模块或变量)

11)未使用的函数/方法的参数(不包括self)

12)模块、类、函数和方法中没有docstring

安装

从官网下载最新版本的PyChecker之后,解压安装即可:

python setup.pyinstall

基本使用

pycheckersetup.py

使用--only参数可以只检查自身的语法问题。

pychecker --onlysetup.py

参数和选项说明:pychecker[options] file1.py file2.py ...

--only        只给出命令行的文件的警告,默认为no

-#,--limit    显示的最大警告数,默认为10

--no-shadowbuiltin    检查是否有变量覆盖了内建变量,默认为off

-q,--stdlib        忽略标准库的文件的警告,默认为off

-T,--argsused    未使用的方法/函数的关键字,默认为on

配置

修改默认配置和行为:.pycheckrc文件,该文件放置在$HOME目录下,--rcfile选项可以生成一份默认的配置文件。

要禁止一些模块/函数/类/方法的警告信息,可以在.pycheckrc文件中定义一个禁止字典,键类似:“module”,“module.function”,“module.class”等。

或者直接在代码中定义:

__pychecker__ =‘no-namedargs maxreturns=0 unsednames=foo,bar‘

其中__pychecker__格式的值和在禁止字典中的值是一样的。

在代码文件中导入PyChecker模块及使用:

importpychecker.checker

这将会检查所有在PyChecker之后导入的模块,之前的不检查。

如果不能传递命令行参数,可以使用:

os.environ[‘PYCHECKER‘]= ‘command line options here‘

等价于在shell环境中设置PYCHECKER:

PYCHECKER=‘no-namedargsmaxreturns=0‘ /path/to/your/program

要关闭警告,可以在导入PyChecker之前,加上:

os.environ[‘PYCHECKER_DISABLED‘]= 1

等价于在shell环境中设置PYCHECKER_DISABLED:

PYCHECKER_DISABLED=1/path/to/your/program

Pylint(推荐)

PyLint的下载地址:https://pypi.python.org/pypi/pylint

PyLint的官网:http://www.pylint.org/

概述

PyLint是Python源代码分析器,它查找编程错误,帮助执行一个代码标准和嗅探一些代码味道。

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

注意:相比于PyChecker,Pylint是一个高阶的Python代码分析工具,它分析Python代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8)和有潜在问题的代码。目前 Pylint 的最新版本是 pylint-1.2.1。可以检查一行代码的长度、变量名是否符合规范等。运行两次可以看出代码是否改进,分数是否有所提高,10分满分。

Pylint是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅参考资料)和有潜在问题的代码。

1)Pylint 是一个 Python 工具,除了平常代码分析工具的作用之外,它提供了更多的功能:如检查一行代码的长度,变量名是否符合命名标准,一个声明过的接口是否被真正实现等等。

2)Pylint 的一个很大的好处是它的高可配置性,高可定制性,并且可以很容易写小插件来添加功能。

3)如果运行两次Pylint,它会同时显示出当前和上次的运行结果,从而可以看出代码质量是否得到了改进。

4)目前在 eclipse 的 pydev 插件中也集成了Pylint。

Pylint要求astroid(越新越好)和logilab-common(版本>= 0.53)软件包。

https://bitbucket.org/logilab/astroid

http://www.logilab.org/projects/common

安装

从源码发行版安装,解压Tar包并且运行:

python setup.py install

快速安装方法:pipinstall pylint

你必须使用类似的方法安装依赖。对于Debian和RPM安装包,根据你Linux发行版中使用你的常用工具。

PyDev中对Python的语法检查使用了PyLint,配置它是需要注意下面几点:

1)首先要安装logilab-asting和logilab-common。

2)然后要让这两个包正常工作,要对logilab-common做些动作:

proc.py line(115)

fromsignal import * #signal, SIGXCPU, SIGKILL, SIGUSR2, SIGUSR1

fromos import * #killpg, getpid, setpgrp

fromthreading import Timer, currentThread, Thread, Event

fromtime import time

#from resource import getrlimit, setrlimit,RLIMIT_CPU, RLIMIT_AS

错误提示说明

(C) 惯例。违反了编码风格标准

(R) 重构。写得非常糟糕的代码。

(W) 警告。某些 Python 特定的问题。

(E) 错误。很可能是代码中的错误。

(F) 致命错误。阻止 Pylint 进一步运行的错误。

运行

从命令行调用Pylint,使用方法如下:

pylint [options] module_or_package

你应该给PyLint传递一个Python包或模块的名称。Pylint将导入该包或模块,因此你应该注意你的PYTHONPATH,因为它是一个常见错误分析模块的安装版本,而不是开发版本。

也可以分析Python文件,但是有一些限制。记住Pylint将尝试转换文件名为模块名,只有成功才能处理文件。

时间: 2024-11-03 22:09:04

Python静态检查工具的相关文章

介绍几款 Python 类型检查工具

微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注. 微软在开源项目上的参与力度是越来越大了,不说收购 Github 这种大的战略野心,只说它家开源的 VS Code 编辑器,在猿界已经割粉无数,连我们 Python 圈的红人 Kenneth Reitz (多个开源项目的作者,包括 requests.requests-html.responder等)都对它赞不绝口. 如今开源的 Pyright ,口碑还不错,那我们就来看看它有啥本事,顺便

Shell学习---Shell脚本的静态检查工具shellcheck

Shell脚本的静态检查工具shellcheck ubuntu下 apt install shellcheck ,即可安装shellcheck.写完shell脚本,记得用它检查一下,能给你点建议的.要检查现有项目的所有的脚本, find your_project_folder -name "*.sh" | xargs -i shellcheck {} 即可实现批量检查 原文地址:https://www.cnblogs.com/ftl1012/p/9568635.html

React Native工程中TSLint静态检查工具的探索之路

建立的代码规范没人遵守,项目中遍地风格迥异的代码,你会不会抓狂? 通过测试用例的程序还会出现Bug,而原因仅仅是自己犯下的低级错误,你会不会抓狂? 某种代码写法存在问题导致崩溃时,只能全工程检查代码,这需要人工花费大量时间Review代码,你会不会抓狂? 以上这些问题,可以通过静态检查有效地缓解! 静态检查(Static Program Analysis)主要是以不运行程序的方式对于程序源代码进行检查分析的技术,而与之相反的就是动态检查(Dynamic Program Analysis),通过实

四种java代码静态检查工具

[转载]常用 Java 静态代码分析工具的分析与比较 转载自 开源中国社区 http://www.oschina.net/question/129540_23043 1月16日厦门 OSC 源创会火热报名中,奖品多多哦 »   简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码

python代码检查工具pylint 让你的python更规范

1.pylint是什么? Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅参考资料)和有潜在问题的代码.目前 Pylint 的最新版本是 pylint-0.18.1. Pylint 是一个 Python 工具,除了平常代码分析工具的作用之外,它提供了更多的功能:如检查一行代码的长度,变量名是否符合命名标准,一个声明过的接口是否被真正实现等等. Pylint 的一个很大的好

C/C++代码静态检查工具Cppcheck在VS2008开发环境中的安装配置和使用

Cppcheck is an analysis tool for C/C++code. Unlike C/C++ compilers and many other analysis tools, it doesn’t detect syntax errors. Cppcheck only detects the types of bugs that the compilers normally fail to detect. The goal is no false positives. Cpp

python语法检查工具

在终端写python脚本的时候,经常在写完脚本运行的时候,才发现错误.如果某些代码没有运行到,则其中的错误不会被检查出来.这是因为python是一门动态解释型语言.这与用gcc编译C等静态语言时可以发现全局的语法问题有所不同. 为了避免潜在的语法问题.我们在写完python脚本文件之后,最好给python脚本做个静态语法检查,以此来避免低级错误. 检查工具有pyflakes, pylint, pep8, flake8等.这里用pyflakes做一下简单的检查. 安装方法: https://pyp

nginx下使用asan和valgrind两个静态检查工具

1.valgrind valgrind安装:参考:https://blog.csdn.net/justheretobe/article/details/52986461 wegit:http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2 tar -jxvf valgrind-3.12.0.tar.bz2 cd valgrind-3.12.0 ./configure make sudo make install 输入valgrind–h显示val

静态代码检查工具 cppcheck 的使用(可分别集成到VS和QT Creator里)

CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们写的代码是否安全和健壮,是否有隐藏的问题. 比如无意间写了这样的代码: [cpp] view plain copy int n = 10; char* buffer = new char[n]; buffer[n] = 0; 这完全是符合语法规范的,但是静态代码检查工具会提示此处会溢出.也就是说,它是一