Python 调用函数时检查参数的类型是否合规的实现代码
作者:是大嘟嘟呀
这篇文章主要介绍了Python 调用函数时检查参数的类型是否合规的实现代码,本文给大家讲解的非常详细,需要的朋友可以参考下
前言
阅读本文大概需要3分钟
说明
在python中,即使加入了类型注解,使用注解之外的类型也是不报错的
def test(uid: int):
print(uid)
test("999")- 但是我就想要
类型不对就直接报错 - 确实可以另辟蹊径,
实现报错,似乎有强类型语言那味了 - 只想淡淡的说一句
装饰器yyds
代码实现
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('有默认值 => {}实际值={}'.format(name, value))
else:
print('无默认值 => {}'.format(name))
# 有注解的参数
if expected != inspect.Parameter.empty:
# 无默认值的参数
if default_value == inspect.Parameter.empty:
if not isinstance(value, expected):
raise TypeError(f"参数'{name}'应该是{expected}而不是{type(value)}")
# 有默认值的参数(值必须是注解类型或者等于默认值)
if value != default_value and not isinstance(value, expected):
raise TypeError(f"参数'{name}'应该是{expected}而不是{type(value)}")
return func(*args, **kwargs)
return wrapper开始表演
@type_check
def demo(n: int, msg: str, state: int = None):
print('正常结束\n')
# 正常调用
demo(1, 'SUCCESS')
# 正常调用
demo(2, 'SUCCESS', 200)
# 引发异常(第3个参数只能是int类型)
demo(3, 'FAILED', '哈哈')
# 引发异常(第1个参数只能是int类型)
demo('4', "FAILED", '嘻嘻') 输出结果

到此这篇关于Python 调用函数时检查参数的类型是否合规的文章就介绍到这了,更多相关Python 检查参数的类型是否合规内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
