当前位置: 首页 > news >正文

Python - 调用函数时检查参数的类型是否合规

前言

  • 阅读本文大概需要3分钟

说明

  • 在python中,即使加入了类型注解,使用注解之外的类型也是不报错
def test(uid: int):print(uid)test("999")
  • 但是我就想要类型不对就直接报错
  • 确实可以另辟蹊径,实现报错,似乎有强类型语言那味了
  • 只想淡淡的说一句装饰器yyds

代码实现

import inspectdef 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.annotationdefault_value = param.defaultif 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", '嘻嘻')  

输出结果

在这里插入图片描述

http://www.lryc.cn/news/380435.html

相关文章:

  • Python基础面试题解答
  • MATLAB直方图中bin中心与bin边界之间的转换
  • Chromium 开发指南2024 Mac篇-开始编译Chromium(五)
  • 2024.06.11校招 实习 内推 面经
  • linux 免密备份文件到另外一台服务器
  • 【html】用html写一个博物馆首页
  • 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【13】压力压测JMeter-性能监控jvisualvm
  • 【python】python海底捞门店营业数据分析与可视化(数据集+源码+论文)【独一无二】
  • 利用机器学习弄懂机器学习!
  • Ubuntu22.04系统安装及配置
  • 抖音多功能全自动引流工具,支持评论关注私信留痕点赞等,让你的抖音粉丝暴涨!
  • day3-xss漏洞(米斯特web渗透测试)
  • HTML中的<iframe>标签及其属性
  • Elastisearch集群(单节点)
  • Vue78-缓存路由组件
  • windows设置开机启动项
  • 【Linux】 yum学习
  • Mac数据如何恢复?3 款最佳 Mac 恢复软件
  • 基于SpringBoot+Vue航空票务管理系统设计和实现(源码+LW+调试文档+讲解等)
  • Gnu/Linux 之 C 语言函数列表初步整理
  • Java学习 (二)关键字、标识符、数组
  • 数据结构与算法笔记:基础篇 - 初始动态规划:如何巧妙解决“双十一”购物时的凑单问题?
  • 使用 select 进行 UART 通信的注意事项
  • 干货 | 2024低空经济产业发展白皮书(免费下载)
  • 打开nginx连接的php页面报错502
  • Qt之文件操作(QFile、QFileInfo、QTemporaryFile)
  • Python爬虫初试
  • ARM-V9 RME(Realm Management Extension)系统架构之系统初始化流程
  • 软件工程考试题备考
  • 一款基于WordPress开发的高颜值的自适应主题Puock