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

 更新时间:2024年06月21日 12:10:59   作者:是大嘟嘟呀  
这篇文章主要介绍了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 检查参数的类型是否合规内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Django显示时间你应该知道的一些问题

    关于Django显示时间你应该知道的一些问题

    将Django项目部署到Linux系统上进行测试时,发现操作记录的时间与服务器的时间不一致,相差13个小时。这主要是因为时区的问题,下面这篇文章主要总结介绍了关于Django显示时间你应该知道的一些问题,需要的朋友可以参考下。
    2017-12-12
  • python基础之并发编程(一)

    python基础之并发编程(一)

    这篇文章主要介绍了详解python的并发编程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-10-10
  • python正则表达式标准库之re库的详细介绍

    python正则表达式标准库之re库的详细介绍

    Python的re库是用于处理正则表达式的标准库,正则表达式是一种强大而灵活的文本处理工具,能够帮助你执行复杂的字符串匹配和替换操作,这篇文章主要介绍了python正则表达式标准库之re库的详细介绍,需要的朋友可以参考下
    2025-06-06
  • Python基于递归算法求最小公倍数和最大公约数示例

    Python基于递归算法求最小公倍数和最大公约数示例

    这篇文章主要介绍了Python基于递归算法求最小公倍数和最大公约数,结合实例形式分析了Python使用递归算法进行数值计算的相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • python之消除前缀重命名的方法

    python之消除前缀重命名的方法

    今天小编就为大家分享一篇python之消除前缀重命名的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 详解在Python中处理异常的教程

    详解在Python中处理异常的教程

    这篇文章主要介绍了详解在Python中处理异常的教程,是Python入门中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Python3多模式匹配问题的实现

    Python3多模式匹配问题的实现

    Aho-Corasick是一种高效的多模式字符串匹配算法,适用于敏感词检测、文本过滤等,本文就来介绍一下Python3多模式匹配,具有一定的参考价值,感兴趣的可以了解一下
    2025-01-01
  • Python PIL库Image函数的基本图像处理操作实例

    Python PIL库Image函数的基本图像处理操作实例

    这篇文章主要为大家介绍了Python PIL库Image函数的基本图像处理操作实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 如何将Python编译成C语言

    如何将Python编译成C语言

    这篇文章主要介绍了如何将Python编译成C语言,我们都知道python比c慢,下面小编就来个大家分享如何将Python编译成C语言,需要的小伙伴可以参考一下
    2022-01-01
  • pycharm恢复默认设置或者是替换pycharm的解释器实例

    pycharm恢复默认设置或者是替换pycharm的解释器实例

    今天小编就为大家分享一篇pycharm恢复默认设置或者是替换pycharm的解释器实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10

最新评论