Python 是一門(mén)動(dòng)態(tài)語(yǔ)言有决, 在編寫(xiě)程序時(shí)埂软,往往只有在執(zhí)行的時(shí)候才能發(fā)現(xiàn)隱藏的錯(cuò)誤剩失, 所以需要一套靜態(tài)檢查工具腰素。
Pyflakes -- 錯(cuò)誤檢查
一個(gè)用于檢查Python源文件錯(cuò)誤
的簡(jiǎn)單程序。
Pyflakes 可以分析程序并且檢查各種錯(cuò)誤轰豆。它是通過(guò)解析源文件實(shí)現(xiàn)胰伍,運(yùn)行相當(dāng)快,但是它不會(huì)檢查文件的代碼風(fēng)格酸休。
安裝命令:pip install --upgrade pyflakes
使用方法:
- 命令行
pyflakes [ file name or directory name]
骂租, 簡(jiǎn)單運(yùn)行結(jié)果如下:
parser.py:1: 'os' imported but unused
client.py:1: 'sys' imported but unused
pycodestyle -- 代碼規(guī)范檢查
原名為pep8,后來(lái)改成了pycodestyle
斑司, 中間有段有趣的小故事渗饮,大家可以查找看看。
pycodestyle 檢查代碼是否符合 PEP 8
規(guī)范宿刮, PEP 8 是一種 Python 代碼規(guī)范指南互站。
安裝命令:pip install pycodestyle
使用方法:
命令行 pycodestyle [file name or directory name]
, 簡(jiǎn)單運(yùn)行結(jié)果如下:
client.py:107:55: E231 missing whitespace after ','
server.py:22:80: E501 line too long (89 > 79 characters)
-
--statistics -qq
: 對(duì)結(jié)果進(jìn)行匯總 -
--show-source
: 更詳細(xì)的輸出 -
--select
E501: 忽略指定輸出
flake8
Flake8 是由 Python 官方發(fā)布的一款輔助檢測(cè) Python 代碼是否規(guī)范的工具僵缺。Flake8 檢查規(guī)則靈活胡桃,支持集成額外插件,擴(kuò)展性強(qiáng)磕潮。
Flake8 是對(duì)下面三個(gè)工具的封裝翠胰, 即該工具可以同時(shí)檢查以下的功能范圍容贝, 但運(yùn)行相對(duì)較慢。
- PyFlakes:靜態(tài)檢查 Python
代碼邏輯錯(cuò)誤
的工具之景。 - Pep8: 靜態(tài)檢查 PEP8
編碼風(fēng)格
的工具斤富。 - NedBatchelder’s McCabe :靜態(tài)分析 Python
代碼復(fù)雜度
的工具。
安裝命令:pip install flake8
使用方法:
命令行 flake8 [ file name or directory name] --max-complexity=12
锻狗, 簡(jiǎn)單運(yùn)行結(jié)果如下:
parser.py:1: 'os' imported but unused
nbs/handler.py:15:80: E501 line too long (87 > 79 characters)
client:67:1: C901 'If 67' is too complex (14)
-
--max-complexity
=12 : 檢查代碼代碼復(fù)雜度满力, 官網(wǎng)建議值為12, 該參數(shù)可不寫(xiě) -
--ignore
E501,E203: 忽略指定風(fēng)格檢查 -
--select
E501: 指定風(fēng)格檢查
Pylint -- 推薦
Pylint是Python源代碼分析器轻纪,查找不符合代碼風(fēng)格標(biāo)準(zhǔn)和有潛在問(wèn)題的代碼油额,具有高度可配置性, 還會(huì)給你代碼打分桐磁。
安裝命令:pip install pylint
使用方法:
命令行 pylint [options] module_or_package
悔耘, 簡(jiǎn)單運(yùn)行結(jié)果如下:
client.py:51:0: R0904: Too many public methods (28/20) (too-many-public-methods)
client.py:327:0: C0103: Constant name "NetAct" doesn't conform to UPPER_CASE naming style (invalid-name)
-----------------------------------
Your code has been rated at 6.79/10
生成report 格式可用pylint --help
查詢讲岁。
錯(cuò)誤代碼含義
- C:慣例我擂,違反了編碼風(fēng)格標(biāo)準(zhǔn)
- R:重構(gòu),代碼非常糟糕
- W:警告缓艳,某些 Python 特定的問(wèn)題
- E:錯(cuò)誤校摩,很可能是代碼中的錯(cuò)誤
- F:致命錯(cuò)誤,阻止 Pylint 進(jìn)一步運(yùn)行的錯(cuò)誤