python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python 检查参数的类型是否合规

Python 调用函数时检查参数的类型是否合规的实现代码

作者:是大嘟嘟呀

这篇文章主要介绍了Python 调用函数时检查参数的类型是否合规的实现代码,本文给大家讲解的非常详细,需要的朋友可以参考下

前言 

阅读本文大概需要3分钟

说明

在python中,即使加入了类型注解,使用注解之外的类型也是不报错

def test(uid: int):
	print(uid)
test("999")

代码实现

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 检查参数的类型是否合规内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文