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

【Python】在运行中使用warnings.filterwarnings,可以忽略测试中遇到的问题

在 Python 中,warnings 是一个内置模块,用于发出有关程序执行的警告信息,这些警告信息通常是关于程序行为的潜在问题。
不过,这些问题通常不是致命的错误,只不过是展示我们代码中潜在的问题,或不推荐的做法,但是不会影响到我们代码的运行。

以下是一些常见的警告类型

DeprecationWarning:当使用的功能已经被弃用,可能会在未来版本中移除时发出。FutureWarning:当使用的功能或行为在未来版本中会有所改变,但目前仍然有效时发出。ImportWarning:当模块导入过程中出现问题时,例如,当使用相对导入而包不是作为模块导入时。PendingDeprecationWarning:与 DeprecationWarning 类似,但用于那些在当前版本中仍然有效,但将在下一个版本中被弃用的功能。RuntimeWarning:当程序运行时发生某些行为可能会影响程序的正确性或性能时发出。SyntaxWarning:当 Python 语法使用方式可能不正确时发出,例如,当在语法上存在一些不推荐的做法时。UnicodeWarning:当处理 Unicode 字符串时出现问题,例如,当处理字符串时可能会丢失信息。BytesWarning:当字节和字符串之间的操作可能导致数据丢失或意外行为时发出。ResourceWarning:当程序可能没有正确管理资源,例如,当文件或网络连接没有被正确关闭时发出。UserWarning:这是一个通用的警告类别,用于发出用户定义的警告信息。EnvironmentError:当环境问题可能影响程序运行时发出,例如,当环境变量设置不当时。Warning:这是所有警告的基类,通常不会直接使用,但可以捕获所有类型的警告。

warnings 模块定义了多种警告类别,例如 DeprecationWarning、FutureWarning、RuntimeWarning 等,我们可以通过指定这些 类别 来发出特定类型的警告,也可以指定警告信息,以及可选地指定文件和行号。

简单测试:

import warningswarnings.warn("This is a warning message.")

返回的结果:
在这里插入图片描述如果我们要指定特定的警告,例如避免测试过程中,某个操作或函数调用可能对性能有负面影响,对服务器造成负担,可以使用警告来提醒:

import warnings
for data in range(10000):#如果想要测试这个方面,建议改数值再运行!if data > 1000:warnings.warn("Processing large data sets can lead to performance issues.")else:print(data)

在这里插入图片描述
如果我们正式运行的过程中,不想要警告报出(有时候确实挺烦的,实际上对运行没有影响但是确会报错),这时候可以通过 warnings.filterwarnings() 来设置过滤规则,决定哪些警告应该被显示或忽略。

使用warnings.filterwarnings函数可以控制警告消息的显示行为。这个函数允许你指定一个过滤规则,以决定哪些警告应该显示,哪些应该被忽略。以下是一些使用warnings.filterwarnings可能产生的效果:

  1. 忽略所有警告
    当你使用warnings.filterwarnings("ignore")时,程序中所有的警告消息都不会显示在控制台上。这在生产环境中很常见,以避免警告信息干扰日志记录或用户界面。

    import warnings
    warnings.filterwarnings("ignore")
    #把这段代码放在上面测试的代码上,原本的报错就不会发生
    
  2. 默认行为(只显示一次警告)
    如果不设置过滤规则,或者使用warnings.filterwarnings("once"),每个警告只会显示一次。这是为了避免重复显示相同的警告信息。

    warnings.filterwarnings("once")
    
  3. 总是显示警告
    使用warnings.filterwarnings("always")可以让每个警告在每次触发时都显示出来,不论它之前是否已经显示过。

    warnings.filterwarnings("always")
    
  4. 模块或类别特定的过滤
    你可以指定只忽略来自特定模块的警告,或者特定类型的警告(如弃用警告DeprecationWarning)。

    # 忽略特定模块的所有警告
    warnings.filterwarnings("ignore", module="numpy")# 忽略所有弃用警告
    warnings.filterwarnings("ignore", category=DeprecationWarning)
    
  5. 错误处理
    将警告当作错误处理,可以通过warnings.filterwarnings("error")实现。这意味着当触发警告时,程序将抛出一个异常。

    warnings.filterwarnings("error")
    
  6. 自定义过滤规则
    你可以定义自己的过滤函数,根据警告的消息、类别、发生的位置等信息来决定是否显示该警告。

    def my_filter(message, category, filename, lineno, line=None):# 根据需要自定义过滤逻辑return message == "Expected warning message"warnings.filterwarnings("ignore", filter=my_filter)
    

使用warnings.filterwarnings的效果取决于我们自己设置的过滤规则。合理使用这些规则,可以有效管理程序中的警告信息,避免无关紧要的警告干扰程序的正常运行,同时也能在需要时获取重要的警告信息。

相关文章:

  • 【数学】什么是方法矩估计?和最大似然估计是什么关系?
  • 用C语言实现扫雷
  • 基于python实现视频和音频长度对齐合成并添加字幕
  • ubuntu gitlab 部署 私有git库
  • 银河麒麟系统安装
  • 为什么javascript中数组可以存储不同类型的元素,而大多编程语言数组必须存储相同的元素?
  • LeetCode-day11-2813. 子序列最大优雅度
  • 每日一题——Python实现PAT乙级1012 数字分类(举一反三+思想解读+逐步优化)五千字好文
  • 基于YOLO检测算法(单检测器网络+多视频输入)设计与实现
  • pdf格式转成jpg图片,pdf格式如何转jpg
  • 网络安全等级保护基本要求解读- 安全计算环境-应用系统和数据安全
  • 19.2 HTTP客户端-定制HTTP请求、调试HTTP、响应超时
  • 国产芯片狂飙,连遥遥领先都给他们写感谢信
  • 2024蓝桥杯初赛决赛pwn题全解
  • java如何预防sql注入
  • [Vue CLI 3] 配置解析之 css.extract
  • [数据结构]链表的实现在PHP中
  • 2017前端实习生面试总结
  • 4个实用的微服务测试策略
  • Angular2开发踩坑系列-生产环境编译
  • CentOS从零开始部署Nodejs项目
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • emacs初体验
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Protobuf3语言指南
  • Service Worker
  • Vue2.0 实现互斥
  • 从重复到重用
  • 关于springcloud Gateway中的限流
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 力扣(LeetCode)22
  • 排序算法学习笔记
  • 十年未变!安全,谁之责?(下)
  • 无服务器化是企业 IT 架构的未来吗?
  • 用quicker-worker.js轻松跑一个大数据遍历
  • scrapy中间件源码分析及常用中间件大全
  • 说说我为什么看好Spring Cloud Alibaba
  • 移动端高清、多屏适配方案
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • (7)svelte 教程: Props(属性)
  • (a /b)*c的值
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (ibm)Java 语言的 XPath API
  • (MATLAB)第五章-矩阵运算
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)计算机毕业设计ssm电影分享网站
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (十五)使用Nexus创建Maven私服
  • (一)Thymeleaf用法——Thymeleaf简介
  • .NET Framework 4.6.2改进了WPF和安全性
  • .Net IE10 _doPostBack 未定义
  • .NET/C# 使窗口永不获得焦点
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka