Vulture 可以在Python程序中查找未使用的代碼。這對(duì)于清理和查找大型項(xiàng)目(代碼庫(kù))中的錯(cuò)誤非常有用。
不過(guò)由于Python的動(dòng)態(tài)特性,像 Vulture 這樣的靜態(tài)代碼分析器很可能會(huì)遺漏一些無(wú)效代碼,此外,可能會(huì)將僅被隱式調(diào)用的代碼標(biāo)記為未使用。
盡管如此,Vulture對(duì)于提升代碼質(zhì)量來(lái)說(shuō)可能是一個(gè)非常有用的工具。
1.功能
- 速度快: 靜態(tài)代碼分析
- 靠譜: 已測(cè)試
- 兼容強(qiáng): 與pyflies相輔相成,具有相同的輸出語(yǔ)法
- 可排序: 可以按大小對(duì)未使用的類(lèi)和函數(shù)進(jìn)行排序
--sort-by-size
- 支持Python>=3.6
2.準(zhǔn)備
開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒(méi)有,可以訪問(wèn)這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。
**(可選1) **如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.
**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn):Python 編程的最好搭檔—VSCode 詳細(xì)指南。
請(qǐng)選擇以下任一種方式輸入命令安裝依賴 :
- Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。
- MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。
- 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install vulture
3.用法
你可以直接使用命令行工具運(yùn)行 vulture:
vulture myscript.py # 或者
python3 -m vulture myscript.py # 或者
vulture myscript.py mypackage/ # 或者
vulture myscript.py --min-confidence 100 # 只報(bào)告100%可能的無(wú)效代碼
如果 vulture 沒(méi)有被加進(jìn)環(huán)境變量(如Windows系統(tǒng)下不會(huì)自動(dòng)加到環(huán)境變量中),建議使用 python -m 的方式調(diào)用 vulture。
可見(jiàn),命令的參數(shù)可以是 Python 文件或目錄。對(duì)于每個(gè)目錄,Vulture 會(huì)分析所有包含的 *.py文件。
Vulture 為每個(gè)無(wú)效代碼塊分配一個(gè)置信度值。100% 的置信度值意味著百分百的無(wú)效代碼。
找到并刪除無(wú)效代碼后,再次運(yùn)行 Vulture,因?yàn)樗赡軙?huì)發(fā)現(xiàn)更多的無(wú)效代碼。
下面舉個(gè)例子,參考下述代碼:
import os
class Greeter:
def greet(self):
print("Hi")
def hello_world():
message = "Hello, world!"
greeter = Greeter()
greet_func = getattr(greeter, "greet")
greet_func()
if __name__ == "__main__":
hello_world()
調(diào)用vulture:
vulture dead_code.py
# 或者
python -m vulture dead_code.py
輸出效果如下:
dead_code.py:1: unused import 'os' (90% confidence)
dead_code.py:4: unused function 'greet' (60% confidence)
dead_code.py:8: unused variable 'message' (60% confidence)
Vulture 正確地將“os”和“message”報(bào)告為未使用,但未能檢測(cè)到實(shí)際使用了“greet”。處理此類(lèi)誤報(bào)的推薦方法是創(chuàng)建一個(gè)白名單 Python 文件。見(jiàn)下面第四點(diǎn)。
4.處理誤報(bào)
當(dāng) Vulture 錯(cuò)誤地將代碼塊報(bào)告為未使用時(shí),有多種選擇來(lái)抑制誤報(bào)。如果修復(fù)誤報(bào)也可以使其他用戶受益,請(qǐng)?zhí)峤粏?wèn)題報(bào)告。
白名單
推薦的選項(xiàng)是將報(bào)告為"未使用的"已使用代碼添加到 Python 模塊,并將其添加到掃描路徑列表中。要自動(dòng)獲取這樣的白名單,請(qǐng)傳遞 ** --make-whitelist
** 給 Vulture:
vulture mydir --make-whitelist > whitelist.py
vulture mydir whitelist.py
請(qǐng)注意,生成的 ** whitelist.py
** 文件將包含有效的 Python 語(yǔ)法,但為了讓 Python 能夠運(yùn)行它,通常需要進(jìn)行一些修改。
忽略文件
如果要忽略整個(gè)文件或目錄,請(qǐng)使用** --exclude
** 參數(shù)如 ** --exclude *settings.py,docs/
** 。
Flake8 noqa 注釋
為了與flake8兼容,Vulture 支持 F401 和 F841錯(cuò)誤代碼以忽略未使用的導(dǎo)入 ( **# noqa: F401
** ) 和未使用的局部變量 ( **# noqa: F841
** )。
但是,我們建議使用白名單而不是** noqa
注釋?zhuān)驗(yàn)?/strong>noqa
**注釋會(huì)給代碼增加視覺(jué)干擾并使其更難閱讀。
忽略名稱(chēng)
你還可以使用 ** --ignore-names foo*,ba[rz]
** 讓 Vulture 忽略所有以 ** foo
** 開(kāi)頭的及 ** bar
** 和 ** baz
** 的名稱(chēng)。
此外,--ignore-decorators
選項(xiàng)可用于忽略用給定裝飾器裝飾的函數(shù)。這在 Flask 項(xiàng)目中很有幫助,可以在其中使用裝飾器** --ignore-decorators "@app.route"
** 忽略所有 ** @app.route
** 函數(shù)。
我們建議使用白名單代替 ** --ignore-names
** 或 ** --ignore-decorators
** ,因?yàn)榘酌麊卧趥鬟f給 Vulture 時(shí)會(huì)自動(dòng)檢查語(yǔ)法正確性。
-
程序
+關(guān)注
關(guān)注
117文章
3807瀏覽量
81724 -
分析器
+關(guān)注
關(guān)注
0文章
93瀏覽量
12598 -
代碼
+關(guān)注
關(guān)注
30文章
4858瀏覽量
69550 -
python
+關(guān)注
關(guān)注
56文章
4813瀏覽量
85316
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
isis 7 professional_元件查找代碼
Python中對(duì)字符串進(jìn)行搜索和查找詳細(xì)介紹
python程序調(diào)試中設(shè)置條件斷點(diǎn)

python代碼示例之基于Python的日歷api調(diào)用代碼實(shí)例

python基礎(chǔ)教程之Python核心編程學(xué)習(xí)詳細(xì)代碼說(shuō)明
如何使用Eclipse調(diào)試Python

Python 代碼加速運(yùn)行的的小技巧
Python證件照制作小程序源代碼

Python如何快速查找文件
Python中的默認(rèn)編碼

評(píng)論