Python?調(diào)用函數(shù)時(shí)檢查參數(shù)的類型是否合規(guī)的實(shí)現(xiàn)代碼
前言
閱讀本文大概需要3分鐘
說明
在python中,即使加入了類型注解,使用注解之外的類型也是不報(bào)錯(cuò)的
def test(uid: int):
print(uid)
test("999")- 但是我就想要
類型不對(duì)就直接報(bào)錯(cuò) - 確實(shí)可以另辟蹊徑,
實(shí)現(xiàn)報(bào)錯(cuò),似乎有強(qiáng)類型語言那味了 - 只想淡淡的說一句
裝飾器yyds
代碼實(shí)現(xiàn)
import inspect
def type_check(func):
def wrapper(*args, **kwargs):
sig = inspect.signature(func)
bound_args = sig.bind(*args, **kwargs)
bound_args.apply_defaults()
for name, value in bound_args.arguments.items():
param = sig.parameters[name]
expected = param.annotation
default_value = param.default
if default_value != inspect.Parameter.empty:
print('有默認(rèn)值 => {}實(shí)際值={}'.format(name, value))
else:
print('無默認(rèn)值 => {}'.format(name))
# 有注解的參數(shù)
if expected != inspect.Parameter.empty:
# 無默認(rèn)值的參數(shù)
if default_value == inspect.Parameter.empty:
if not isinstance(value, expected):
raise TypeError(f"參數(shù)'{name}'應(yīng)該是{expected}而不是{type(value)}")
# 有默認(rèn)值的參數(shù)(值必須是注解類型或者等于默認(rèn)值)
if value != default_value and not isinstance(value, expected):
raise TypeError(f"參數(shù)'{name}'應(yīng)該是{expected}而不是{type(value)}")
return func(*args, **kwargs)
return wrapper開始表演
@type_check
def demo(n: int, msg: str, state: int = None):
print('正常結(jié)束\n')
# 正常調(diào)用
demo(1, 'SUCCESS')
# 正常調(diào)用
demo(2, 'SUCCESS', 200)
# 引發(fā)異常(第3個(gè)參數(shù)只能是int類型)
demo(3, 'FAILED', '哈哈')
# 引發(fā)異常(第1個(gè)參數(shù)只能是int類型)
demo('4', "FAILED", '嘻嘻') 輸出結(jié)果

到此這篇關(guān)于Python 調(diào)用函數(shù)時(shí)檢查參數(shù)的類型是否合規(guī)的文章就介紹到這了,更多相關(guān)Python 檢查參數(shù)的類型是否合規(guī)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Django顯示時(shí)間你應(yīng)該知道的一些問題
將Django項(xiàng)目部署到Linux系統(tǒng)上進(jìn)行測(cè)試時(shí),發(fā)現(xiàn)操作記錄的時(shí)間與服務(wù)器的時(shí)間不一致,相差13個(gè)小時(shí)。這主要是因?yàn)闀r(shí)區(qū)的問題,下面這篇文章主要總結(jié)介紹了關(guān)于Django顯示時(shí)間你應(yīng)該知道的一些問題,需要的朋友可以參考下。2017-12-12
python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)之re庫(kù)的詳細(xì)介紹
Python的re庫(kù)是用于處理正則表達(dá)式的標(biāo)準(zhǔn)庫(kù),正則表達(dá)式是一種強(qiáng)大而靈活的文本處理工具,能夠幫助你執(zhí)行復(fù)雜的字符串匹配和替換操作,這篇文章主要介紹了python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)之re庫(kù)的詳細(xì)介紹,需要的朋友可以參考下2025-06-06
Python基于遞歸算法求最小公倍數(shù)和最大公約數(shù)示例
這篇文章主要介紹了Python基于遞歸算法求最小公倍數(shù)和最大公約數(shù),結(jié)合實(shí)例形式分析了Python使用遞歸算法進(jìn)行數(shù)值計(jì)算的相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
Python PIL庫(kù)Image函數(shù)的基本圖像處理操作實(shí)例
這篇文章主要為大家介紹了Python PIL庫(kù)Image函數(shù)的基本圖像處理操作實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
pycharm恢復(fù)默認(rèn)設(shè)置或者是替換pycharm的解釋器實(shí)例
今天小編就為大家分享一篇pycharm恢復(fù)默認(rèn)設(shè)置或者是替換pycharm的解釋器實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10

