使用mypy對python程序進(jìn)行靜態(tài)檢查
前言
在此之前,我認(rèn)為 Python 的類型提示就是一個花瓶,看起來好看,但并沒有實質(zhì)的作用,因為即使類型寫錯了,或者傳錯了,程序仍然可以運行,直到我發(fā)現(xiàn)了 mypy 這個工具。今天就來聊一聊 mypy。
mypy 是 Python 中的靜態(tài)類型檢查器。寫完帶有類型提示的代碼之后,先別運行行,用 mypy 命令來檢查下你的代碼,如果有錯誤,會提示你,這讓 Python 的類型提示有了真正的作用。后續(xù)開發(fā)的過程中可以強(qiáng)制 mypy 檢查無誤后才能上線,借此提高代碼的可讀性和可維護(hù)性。
嗯,很實用,不是嗎?下面分享一下如何使用 mypy。
1、安裝
這個很簡單了,pip install mypy 就搞定了。
2、執(zhí)行
假如有這樣一個 Python 程序,名稱叫 demo1.py,內(nèi)容如下:
def greeting(name: str) -> str: #這里提示有問題
print (f'Hello { name }')
x: str = 'xxx'
y: int = "yyy" #這里應(yīng)該提示有問題
greeting(x)
greeting(y) #這里應(yīng)該提示有問題
代碼我已經(jīng)指出了兩處錯誤,現(xiàn)在讓 mypy 檢查一下:
果然,mypy 發(fā)現(xiàn)了三處錯誤,并一一提示,非常好用啊。
如果不希望檢查某一行,可以在注釋上加上"# type: ignore":
y: int = "yyy" # type: ignore
mypy 具有強(qiáng)大且易于使用的類型系統(tǒng),具有很多優(yōu)秀的特性,例如類型推斷、泛型、可調(diào)用類型、元組類型、聯(lián)合類型和結(jié)構(gòu)子類型。
3、常用的內(nèi)置類型
4、配置文件
mypy 將依次查找當(dāng)前目錄下配置文件
mypy.ini
.mypy.ini
pyproject.toml
setup.cfg
如果還找不到,則依次尋找下面的配置文件:
$XDG_CONFIG_HOME/mypy/config
~/.config/mypy/config
~/.mypy.ini
此外,你也可以使用??--config-file?
? 指定配置文件。
一個典型的 mypy.ini 配置文件如下:
# Global options: [mypy] python_version = 3.7 warn_return_any = True warn_unused_configs = True # Per-module options: [mypy-mycode.foo.*] disallow_untyped_defs = True [mypy-mycode.bar] warn_return_any = False [mypy-somelibrary] ignore_missing_imports = True
配置文件的詳細(xì)說明,見官方文檔:https://mypy.readthedocs.io/en/stable/
常見配置項:
files 逗號分隔的路徑列表,如果命令行上沒有給出,則應(yīng)由 mypy 檢查,支持遞歸。
exclude 應(yīng)忽略檢查的文件名、目錄名和路徑
ignore_missing_imports 禁止有關(guān)無法解析的導(dǎo)入的錯誤消息。
disallow_untyped_defs 不允許定義沒有類型注釋或類型注釋不完整的函數(shù)。
plugins 逗號分隔的 mypy 插件列表
最后的話
mypy 是自動化測試中很重要的一部分,可以幫助我們檢查 Python 語言的類型提示是否正確,減少代碼的 bug,Python 開發(fā)的朋友們一定要用一用。
到此這篇關(guān)于使用mypy對python程序進(jìn)行靜態(tài)檢查的文章就介紹到這了,更多相關(guān)mypy靜態(tài)檢查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 標(biāo)準(zhǔn)差計算的實現(xiàn)(std)
這篇文章主要介紹了python 標(biāo)準(zhǔn)差計算的實現(xiàn)(std),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Python實戰(zhàn)之實現(xiàn)百度智能圖片識別
這篇文章主要介紹了如何利用Python編寫一個百度智能圖片識別項目,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-01-01詳解opencv中畫圓circle函數(shù)和橢圓ellipse函數(shù)
這篇文章主要介紹了opencv中畫圓circle函數(shù)和橢圓ellipse函數(shù),本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12