2019-04-26
阅读量:
647
inspect模块经典应用
参数检查
def gdy_paramCheck(fn):
"""
参数检查
:param fn: 需要检查的函数
:return: 包装后的fn
"""
@functools.wraps(fn)
def _gdy_paramCheck(*args,**kwargs):
params = inspect.signature(fn).parameters #对函数签名,获取参数注解字典
for ag,(k,v) in zip(args,params.items()): ##检查位置参数
v:inspect.Parameter = v #利用参数注解,告诉编译器v是Parameter类型。本行可以删除,只是帮助编译器给出提示
# print(k=="args")
if k == "args": break #如果碰到args收集多个位置参数,就直接跳出循环。
if v.annotation != inspect._empty and not isinstance(ag,v.annotation):
# raise TypeError(""{}={},参数类型错误!错误类型:{},类型应为:{}".format(k,ag,type(ag),v.annotation))
print("{}={},参数类型错误!错误类型:{},类型应为:{}".format(k,ag,type(ag),v.annotation))
return
for k,v in kwargs.items():
key:inspect.Parameter = params[k] #利用参数注解,告诉编译器key是Parameter类型。本行可以删除,只是帮助编辑器能给出提示
if key.empty != key.annotation and not isinstance(v,key.annotation):
# raise TypeError("{}={},参数错误!错误类型:{}类型应为:{}".format(k,v, type(v),key.annotation))
print("{}={},参数错误!错误类型:{}类型应为:{}".format(k,v, type(v),key.annotation))
return
return fn(*args,**kwargs)
return _gdy_paramCheck






评论(0)


暂无数据
推荐帖子
2条评论
6条评论
7条评论