用Pylint分析代码,Pylint是另一个开源的静态代码分析器,最初由Logilab开发。Pylint比Pyflakes复杂,且允许用户做更多的定制,但分析速度比Pyflakes慢。更多相关信息请见http://www.logilab.org/card/pylint_manual。
在本章中,我们还是需要先从Git版本库下载NumPy代码。简明起见,此处省略对该步骤的介绍。
准备工作
你可以选择从源代码安装Pylint,但各种依赖关系处理起来比较麻烦,因此最好选择用easy_install或pip安装,安装命令如下。
easy_install pylint
sudo pip install pylint
具体步骤
我们还是选择对NumPy代码库的根目录中的文件进行分析。和用Pyflakes分析相比,我们得到的输出信息要多很多。因为Pylint打印出了太多文本信息,所以这里只列出其中的一小部分。
$ pylint *.py
No config file found, using default configuration
************* Module pavement
C: 60: Line too long (81/80)
C:139: Line too long (81/80)
...
W: 50: TODO
W:168: XXX: find out which env variable is necessary to avoid the
pb with python
W: 71: Reimport 'md5' (imported line 143)
F: 73: Unable to import 'paver'
F: 74: Unable to import 'paver.easy'
C: 79: Invalid name "setup_py" (should match (([A-Z_][A-Z0-
9_]*)|(__.*__))$)
F: 86: Unable to import 'numpy.version'
E: 86: No name 'version' in module 'numpy'
C:149: Operator not followed by a space
if sys.platform =="darwin":
^^
C:202:prepare_nsis_script: Missing docstring
W:228:bdist_superpack: Redefining name 'options' from outer scope
(line 74)
C:231:bdist_superpack.copy_bdist: Missing docstring
W:275:bdist_wininst_nosse: Redefining name 'options' from outer
scope (line 74)
...
攻略小结
Pylint默认输出纯文本的分析结果,但如有需要,可以指定其输出HTML格式的信息。分析结果是一条条的消息,消息的格式如下。
MESSAGE_TYPE: LINE_NUM:[OBJECT:] MESSAGE
消息类型有以下几种。
- [R] 重构类型,建议进行重构。
- [C] 惯例类型,违反了代码风格。
- [W] 警告类型,针对小问题的警告消息。
- [E] 错误类型,错误或潜在的bug。
- [F] 致命错误类型,发生了致命错误,因此不能进行进一步的分析。