python程式碼檢查
實際參與過專案開發後就能夠深深體會到程式碼的規範對專案的重要性,這中間不僅關係著你對程式碼bug的修正還包括有後來的夥伴們拜讀你的原始碼時,如果程式碼不規範,亂七八糟的,被小夥伴打死或者熬夜找bug事小,影響專案進度或者破壞專案結構就完蛋了
通常我們的python程式碼都是遵循ofollow,noindex">PEP8 的規範化格式,目的是為了保持程式碼的一致性、可讀性。,這裡給大家推薦幾個常用的靜態程式碼檢查工具,大家可以酌情選擇使用
1. pylint
Pylint是一個Python靜態程式碼分析工具,它可以查詢程式設計錯誤,幫助強制執行編碼標準,嗅探程式碼異味並提供簡單的重構建議。
它具有高度可配置性,具有特殊的編譯指示來控制程式碼中的錯誤和警告,以及廣泛的配置檔案。也可以編寫自己的外掛來新增自己的檢查或以某種方式擴充套件pylint。
預設情況下,PyLint 啟用許多規則。它具有高度可配置性,從程式碼內部處理程式控制它。另外,編寫外掛新增到自己的檢查中是可能的。
安裝
pip install pylint #如果您使用的是Python 3.6+,請升級以獲得對您的版本的完全支援: pip install pylint --upgrade #如果要從源分發版安裝,請解壓縮tarball並執行以下命令 python setup.py install
文件
該文件位於http://pylint.pycqa.org/ 。
Pylint附帶以下附加命令:
- pyreverse:一個UML圖生成器
- symilar:一個獨立的相似性檢查器
- epylint:Emacs和Flymake相容的Pylint
使用
pylint的各種引用以及使用方式都可以去文件 查詢,這裡僅介紹一下比較基礎簡單的示例
pylint [options] modules_or_packages
命令列選項
引數 | 含義 |
---|---|
--version | 顯示程式的版本號並退出 |
-h, --help | 顯示有關命令列選項的幫助 |
--ignore=<file[,file...]> | 將檔案或目錄新增到黑名單。它們應該是基本名稱,而不是路徑。 |
--output-format=<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等等,小編直接出到這兩個常用的,更多內容大家在專案實戰中應該會有更多接觸