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

相关文章

  • Python实现的NN神经网络算法完整示例

    Python实现的NN神经网络算法完整示例

    这篇文章主要介绍了Python实现的NN神经网络算法,结合完整实例形式分析了Python使用numpy、matplotlib及sklearn模块实现NN神经网络相关算法实现技巧与操作注意事项,需要的朋友可以参考下
    2018-06-06
  • Python机器学习pytorch交叉熵损失函数的深刻理解

    Python机器学习pytorch交叉熵损失函数的深刻理解

    这篇文章主要为大家介绍了Python机器学习中对交叉熵损失函数的深刻理解,文中作出了详细易懂的讲解,有需要的朋友可以借鉴参考下希望能够有所帮助
    2021-10-10
  • python中从str中提取元素到list以及将list转换为str的方法

    python中从str中提取元素到list以及将list转换为str的方法

    今天小编就为大家分享一篇python中从str中提取元素到list以及将list转换为str的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • python Django里CSRF 对应策略详解

    python Django里CSRF 对应策略详解

    这篇文章主要介绍了python Django里CSRF 对应策略详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python中encode和encoding的区别小结

    Python中encode和encoding的区别小结

    Python是一种非常流行的高级编程语言,它提供了许多内置函数和库来方便地处理文本数据,其中,encode和encoding是处理文本编码的重要概念,本文就来介绍一下Python中encode和encoding的区别小结,感兴趣的可以了解一下
    2023-11-11
  • Django Haystack 全文检索与关键词高亮的实现

    Django Haystack 全文检索与关键词高亮的实现

    这篇文章主要介绍了Django Haystack 全文检索与关键词高亮的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 深入了解python的tkinter实现简单登录

    深入了解python的tkinter实现简单登录

    这篇文章主要为大家介绍了python的tkinter实现简单登录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • jetson上安装pycharm的详细过程

    jetson上安装pycharm的详细过程

    Pycharm是一个非常优秀的代码编辑、调试,开发软件,我平时在Windows系统学习编程时也比较喜欢使用Pycharm,这篇文章主要介绍了jetson上安装pycharm的过程,需要的朋友可以参考下
    2022-07-07
  • python实现串口自动触发工作的示例

    python实现串口自动触发工作的示例

    今天小编就为大家分享一篇python实现串口自动触发工作的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python类如何定义私有变量

    Python类如何定义私有变量

    这篇文章主要介绍了Python类如何定义私有变量,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02

最新评论