檢查函式傳入引數的合法性

2021-08-31 18:22:23 字數 1064 閱讀 9633

python是一門動態語言,因此在呼叫函式的時候,可以傳入任何型別的資料,而他又是一門強型別語言,當傳入的引數不合法時,便會在內部報錯。

為了減少這一錯誤的發生,python從3.5開始引入了函式註解,如下所示:

def fn(x:int, y:int):

pass

配合inspect模組,可以有效的檢查傳入函式是否合法

首先,通過sig=inpect.signature(fn),可以獲取到fn函式的引數,然後通過sig.parameters得到乙個引數的ordereddict,當呼叫函式fn時,通過獲取函式呼叫時傳入的引數,來判斷是否符合有序字典中相應的引數型別。

在此,可以把該方法包裝成乙個check裝飾器,具體**實現大致如下:

import inspect,functools

def check(fn):

sig = inspect.signature(fn) #獲取函式引數型別

params = sig.parameters #有序字典

values = list(params.values())

for i,v in enumerate(args): #獲取函式呼叫時的值

if values[i].annotation is inspect._empty or isinstance(v, values[i].annotation): #如果函式註解為空或者輸入的值符合函式註解時pass,否則提示引數錯誤

pass

else:

print('wrong param')

return

for k, v in kwargs.items():

if params[k].annotation is inspect._empty or isinstance(v, params[k].annotation):

pass

else:

print('wrong param')

return

x = fn(*args,**kwargs)

return x

檢查郵箱合法性

1 標準的c和c 都不支援正規表示式,但有一些函式庫可以輔助c c 程式設計師完成這一功能,其中最著名的當數philip hazel的perl compatible regular expression庫,許多linux發行版本都帶有這個函式庫。2 c c 中使用正規表示式一般分為三步 1 編譯正規...

檢查 URL 合法性

方法一 自己總結,親測可用 public static boolean checkurl string url 0 9 1 9 0 9 1 9 25 0 5 2 0 4 0 9 0 1 0 9 1 9 0 9 1 9 0 25 0 5 2 0 4 0 9 0 1 0 9 1 9 0 9 1 9 0 ...

JAVA日期合法性檢查

日期檢查 param pinput 要檢查的字串 return boolean 檢查結果 public static boolean isdate string pinput string regex d 02468 048 13579 26 0?1357 8 1 02 0?1 9 1 2 0 9 ...