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

news2024/10/5 21:25:33

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

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

DeprecationWarning:当使用的功能已经被弃用,可能会在未来版本中移除时发出。

FutureWarning:当使用的功能或行为在未来版本中会有所改变,但目前仍然有效时发出。

ImportWarning:当模块导入过程中出现问题时,例如,当使用相对导入而包不是作为模块导入时。

PendingDeprecationWarning:与 DeprecationWarning 类似,但用于那些在当前版本中仍然有效,但将在下一个版本中被弃用的功能。

RuntimeWarning:当程序运行时发生某些行为可能会影响程序的正确性或性能时发出。

SyntaxWarning:当 Python 语法使用方式可能不正确时发出,例如,当在语法上存在一些不推荐的做法时。

UnicodeWarning:当处理 Unicode 字符串时出现问题,例如,当处理字符串时可能会丢失信息。

BytesWarning:当字节和字符串之间的操作可能导致数据丢失或意外行为时发出。

ResourceWarning:当程序可能没有正确管理资源,例如,当文件或网络连接没有被正确关闭时发出。

UserWarning:这是一个通用的警告类别,用于发出用户定义的警告信息。

EnvironmentError:当环境问题可能影响程序运行时发出,例如,当环境变量设置不当时。

Warning:这是所有警告的基类,通常不会直接使用,但可以捕获所有类型的警告。

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

简单测试:

import warnings

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1833136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

红酒:家庭环境中如何创造理想的红酒储存环境

对于热爱品鉴红酒的人来说,如何在家庭环境中创造一个理想的红酒储存环境是至关重要的。理想的储存环境能够确保红酒的品质和口感长时间保持理想状态。下面云仓酒庄雷盛红酒将介绍一些在家庭环境中创造理想红酒储存环境的建议: 温度控制:红酒的…

2024年ERP软件公司排名前十!

在当今的商业环境中,ERP(企业资源规划)系统已成为企业日常运营不可或缺的一部分。然而,如何在这众多的ERP系统软件中筛选出最适合自己的一款,成为许多企业共同面临的挑战。今天,我将带大家盘点erp软件公司的…

生成式AI新篇章:亚马逊云科技助力重塑数字未来

编辑:阿冒 设计:沐由 “任何非常先进的技术,初看都与魔法无异。”对于这句话,想必科幻迷们应该不会感到陌生。这则广为人知的定律,是著名科幻小说作家亚瑟克拉克在《2001太空漫游》中提出的。 正因为如此,当…

知识图谱存在的挑战---隐私、安全和伦理相关和测试认证相关

文章目录 隐私、安全和伦理相关测试认证相关 隐私、安全和伦理相关 从部署拓扑结构而言,知识图谱技术以数据为核心、数据库为载体的方式来存储,有单机、云平台、集群及其组合的部署方式,结合大数据平台、云平台、业务系统、灾备、网络系统及其…

【代码随想录】【算法训练营】【第41天】 [416]分割等和子集

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 40,休息,休息一下~ day 41,艰难的周一~ 题目详情 [416] 分割等和子集 题目描述 416 分割等和子集 解题思路 前提:是否可以将数组分为和相等的…

cloud_enum:一款针对不同平台云环境安全的OSINT工具

关于cloud_enum cloud_enum是一款功能强大的云环境安全OSINT工具,该工具支持AWS、Azure和Google Cloud三种不同的云环境,旨在帮助广大研究人员枚举目标云环境中的公共资源,并尝试寻找其中潜在的安全威胁。 功能介绍 当前版本的cloud_enum支…

VBA学习(2):Excel VBA初学者编写第一个宏

要在Excel中编写宏程序,首先需要了解VBA语言,而快速入门的技巧就是使用宏录制器。 宏录制器就像一台录音机,可以使用VBA监听和记录你在Excel中所做的一切操作。对于初学者来说,你可能不了解VBA,这里,我们会…

如何利用被动DNS(Passive DNS)加强网络安全

通过收集和分析被动DNS数据,可以帮助识别恶意站点,打击钓鱼和恶意软件,本文将介绍如何利用被动DNS(Passive DNS)加强网络安全。 在过去的一些年里,我们目睹了对DNS基础设施的攻击日益增多:对权…

【S32K 进阶之旅】 将 EB 配置生成的 MCAL 代码集成到 S32DS 中

本文介绍如何使用 S32DS 进行 AUTOSAR MCAL 工程的编译和调试,重点在于将 EB 配置生成的 MCAL 代码集成到 S32DS 中。 虽然配置过程较为繁琐,实操过一遍就会熟悉整个工程的框架。以后每次在 EB 中更新配置,生成代码的文件夹已经集成在 S32DS…

Selenium+Pytest自动化测试框架能碰撞出什么样的火花

前言 selenium自动化 pytest测试框架 本章你需要 一定的python基础——至少明白类与对象,封装继承 一定的selenium基础——本篇不讲selenium,不会的可以自己去看selenium中文翻译网 一、测试框架简介 测试框架有什么优点呢: 代码复用率高…

从多线程设计模式到对 CompletableFuture 的应用

大家好,我是 方圆。最近在开发 延保服务 频道页时,为了提高查询效率,使用到了多线程技术。为了对多线程方案设计有更加充分的了解,在业余时间读完了《图解 Java 多线程设计模式》这本书,觉得收获良多。本篇文章将介绍其…

《C++ Primer》导学系列:第 4 章 - 表达式

4.1 基础 4.1.1 基本概念 组合运算符和运算对象 组合运算符是指将两个或多个操作数结合在一起进行运算的符号。在C中&#xff0c;常见的组合运算符包括算术运算符&#xff08;如, -, *, /, %&#xff09;、关系运算符&#xff08;如<, >, <, >, , !&#xff09;…

docker-compose jira、bugzilla、zentao

参见文章&#xff0c;这里是对之前的内容进行了改动&#xff0c;主要讲怎么将zentao容器融入到已有的docker-compose.yml中 一、zentao镜像 从官网上拉取&#xff1a;https://hub.docker.com/r/easysoft/zentao/tags 可以选择自己想要的版本&#xff0c;这里我选择的是开源版…

工厂物料管理系统(数据库课设)

1.课设要求描述 ●实现物料的分类管理; ●实现部门和员工信息管理; ●实现物料的入库和领用管理; ●实现物料的转仓管理; ●创建触发器&#xff0c;实现物料入库和领用时相应物料库存的自动更新; ●创建触发器&#xff0c;实现转仓时转入仓库物料增加、转出仓库物料减少…

线性卷积(相关)和圆周卷积(相关)以及FFT之间的关系(AEC举例)

时域自适应滤波算法中的线性卷积和线性相关运算量较大&#xff0c;导致计算复杂度升高&#xff0c;我们更愿意把这两个信号变换到频域&#xff0c;通过频域相乘的方式来取代时域复杂度相当高的卷积或相关运算。 预备知识&#xff1a;线性卷积&#xff08;相关&#xff09;和圆…

单一管理平台 - Enterprise Global Console

大约三年前&#xff0c;当我们向客户和社区推出控制台时&#xff0c;MinIO 的世界发生了变化。这是可访问性的巨大飞跃。可靠的 CLI 和 MC 命令很快让位于我们新的基于浏览器的 GUI 的速度和直观可用性。对于开发人员和企业 IT 管理员来说&#xff0c;这是一个游戏规则的改变者…

单片机建立自己的库文件(4)

文章目录 前言一、新建自己的外设文件夹1.新建外设文件夹&#xff0c;做项目好项目文件管理2.将之前写的.c .h 文件添加到文件夹中 二、在软件中添加项目 .c文件2.1 编译工程保证没问题2. 修改项目列表下的名称 三、在软件项目中添加 .h文件路径四、实际使用测试总结 前言 提示…

使用 C# 进行面向对象编程:第 10 部分

封装和抽象之间的区别 对于 OOP 初学者来说&#xff0c;封装和抽象之间存在非常基本的区别。他们可能会对此感到困惑。但如果你详细了解这两个主题&#xff0c;就会发现它们之间存在巨大差异。 抽象意味着向用户隐藏不必要的数据。用户只需要所需的功能或根据其需求的输出。例…

遵循法规,科学检测:可燃气体报警器多久检测一次?

在工业生产和日常生活中&#xff0c;可燃气体报警器作为一种重要的安全设备&#xff0c;能够实时监测并预警潜在的可燃气体泄漏风险&#xff0c;对于防范火灾和爆炸事故至关重要。 在这篇文章中&#xff0c;佰德将围绕可燃气体报警器的检测频率展开探讨&#xff0c;包括其功能…

基于WPF技术的换热站智能监控系统15--实时读取PLC数据

1、创建PLC实时数据 1、添加数据块 2、创建6个变量 用来表示水泵1和水泵2的参数&#xff0c;可以根据现场实际情况添加更多的变量参数 3、设置块属性并编译 4、下载该程序到PLC中 5、添加监控表 2、读取设备数据 S7协议下的tcp直接通讯&#xff0c;配置简单&#xff0c;一般P…