Python 模块简介 -- warnings
Python 通过调用 warnings 模块中定义的 warn() 函数来发出警告。警告消息通常用于提示用户一些错误或者过时的用法,当这些情况发生时我们不希望抛出异常或者直接退出程序。警告消息通常写入 sys.stderr,对警告的处理方式可以灵活的更改,例如忽略或者转变为为异常。警告的处理可以根据警告类别,警告消息的文本和发出警告消息的源位置而变化。对相同源位置的特定警告的重复通常被抑制。
警告控制分为两个阶段:首先,警告被触发时,确定是否应该发出消息;接下来,如果要发出消息,则使用用户可设置的钩子来格式化和打印消息。
警告过滤器可以用来控制是否发出警告消息,警告过滤器是一些匹配规则和动作的序列。可以通过调用 filterwarnings()
将规则添加到过滤器,并通过调用 resetwarnings()
将其重置为默认状态。
警告消息的输出是通过调用 showwarning() 函数来完成的,其可以被覆盖;该函数的默认实现通过调用 formatwarning() 格式化消息,这也可以由自定义实现使用。
警告类别
內建警告类型:
类 | 描述 |
---|---|
Warning | 所有警告类别类的基类,它是 Exception 的子类 |
UserWarning | 函数 warn() 的默认类别 |
DeprecationWarning | 用于已弃用功能的警告(默认被忽略) |
SyntaxWarning | 用于可疑语法的警告 |
RuntimeWarning | 用于有关可疑运行时功能的警告 |
FutureWarning | 对于未来特性更改的警告 |
PendingDeprecationWarning | 对于未来会被弃用的功能的警告(默认将被忽略) |
ImportWarning | 导入模块过程中触发的警告(默认被忽略) |
UnicodeWarning | 与 Unicode 相关的警告 |
BytesWarning | 与 bytes 和 bytearray 相关的警告 (Python3) |
ResourceWarning | 与资源使用相关的警告(Python3) |
可以通过继承內建警告类型来实现自定义的警告类型,警告类型必须始终是 Warning
类的子类
警告过滤器
警告过滤器用于控制警告的行为,如忽略,显示或转换为错误(引发异常)
。警告过滤器维护着一个有序的过滤规则列表,匹配规则用于确定如何处理警告,任何特定警告都将依次与列表中的每个过滤规则匹配,直到找到匹配为止。过滤规则类型为一个元组 (action,message,category,module,lineno),其中:
- action 为以下值:
值 | 处理方式 |
---|---|
"error" | 将匹配警告转换为异常 |
"ignore" | 忽略匹配的警告(经常用) |
"always" | 始终输出匹配的警告 |
"default" | 对于同样的警告只输出第一次出现的警告 |
"module" | 在一个模块中只输出第一次出现的警告 |
"once" | 输出第一次出现的警告,而不考虑它们的位置 |
- message 是包含正则表达式的字符串,警告消息的开始必须匹配,不区分大小写
- category 是一个警告类型(必须是 Warning 的子类)
- module 是包含模块名称的正则表达式字符串,区分大小写
- lineno 是一个整数,警告发生的行号,为 0 则匹配所有行号
默认警告过滤器
默认情况下,Python 设置了几个警告过滤器,可以通过 -W 命令行选项和调用 filterwarnings() 函数来覆盖它们。
DeprecationWarning
和PendingDeprecationWarning
和ImportWarning
被默认忽略。- 除非 -b 选项给出一次或两次,否则忽略
BytesWarning
;在这种情况下,此警告或者被输出(-b)或者变成异常(-bb)。 - 除非 Python 是在调试模式下构建的,否则将忽略 ResourceWarning。
在 3.2 版中的调整: 除 PendingDeprecationWarning 之外,默认情况下将忽略DeprecationWarning
可用函数
warn
warnings.warn(message, category=None, stacklevel=1, source=None)
触发异常。category
参数默认为 UserWarning。message
参数为警告消息,可以是 Warning 实例,在这种情况下,将忽略 category 并使用 message.__class__
,消息文本则为 str(message)。
这是 warn() 函数的低级接口,明确传递消息,类别,文件名和行号,以及可选的模块名称和注册表(应该是模块的 __warningregistry__
字典)
showwarning
warnings.showwarning(message, category, filename, lineno, file=None, line=None)
写入警告到文件。默认调用 formatwarning(message, category, filename, lineno, line) 并将结果字符串写入 file
,默认为 sys.stderr。 line
是包含在警告消息中的一行源代码;如果未提供则尝试读取由 filename 和 lineno 指定的行。
formatwarning
warnings.formatwarning(message, category, filename, lineno, line=None)
格式化警告,返回一个字符串。可能包含嵌入的换行符,并以换行符结束。 line
是包含在警告消息中的一行源代码;如果不提供则尝试读取由 filename 和 lineno 指定的行。
filterwarnings
warnings.filterwarnings(action, message='', category=Warning, module='', lineno=0, append=False)
过滤警告,在 警告过滤器规则
列表中插入一个条目。默认情况下,条目插入在前面;如果 append 为真,则在末尾插入。它检查参数的类型,编译 message 和 module 的正则表达式,并将它们作为警告过滤器列表中的元组插入。如果多个地方都匹配特定的警告,那么更靠近列表前面的条目会覆盖列表中后面的条目,省略的参数默认为匹配一切的值。
simplefilter
warnings.simplefilter(action, category=Warning, lineno=0, append=False)
简单易用的过滤器,类似 filterwarnings()
函数,但是不需要正则表达式。
resetwarnings
warnings.resetwarnings()
重置警告过滤器。这会丢弃所有以前对 filterwarnings() 调用的影响,包括 -W 命令行选项和对 simplefilter() 的调用的影响。
可用的上下文管理器
class warnings.catch_warnings(*, record=False, module=None)
捕获警告,在退出上下文时恢复警告过滤器和 showwarning() 函数功能。如果 record 参数是 False (缺省值),则上下文管理器在入口处返回 None。如果 record 是 True,则返回一个列表,该列表元素为 showwarning() 函数所见的对象,列表中的每个元素都具有与 showwarning() 的参数具有相同名称的属性。
import warningswarnings.simplefilter("always")def fxn():warnings.warn("this is a warning", Warning)with warnings.catch_warnings():warnings.simplefilter("ignore")fxn()with warnings.catch_warnings(Warning):warnings.warn("this is a warning2", Warning)warnings.warn("this is a warning3", Warning)def fxn2():warnings.warn("deprecated", DeprecationWarning)with warnings.catch_warnings(record=True) as w:# Cause all warnings to always be triggered.warnings.simplefilter("always")# Trigger a warning.fxn2()# Verify some thingsassert len(w) == 1assert issubclass(w[-1].category, DeprecationWarning)assert "deprecated" in str(w[-1].message)
可以从命令行通过传递 -Wd 参数到解释器(即为 -W default
的速记)。这将为所有警告启用默认处理,包括默认情况下忽略的警告。要更改遇到的警告所采取的操作,只需更改传递给 -W 的参数即可,如 -W error
。可以用 python --help
来查看 -W 参数的详细使用。
在代码中实现 -Wd
的功能为:
warnings.simplefilter('default')
这样的代码应该在程序开始被执行,否则有些警告可能仍然会被触发。
Python 模块简介 -- warnings相关推荐
- Python报错日志:Warnings模块简介
前言 这两天开始学习机器学习,在完成鸢尾花数据集的模型建立的时候,报出来一大堆的FutureWarning,虽然不影响数据,但是看着十分碍眼,所以使用Wainings模块将其屏蔽掉: from war ...
- python paramiko 模块简介(SSH2协议)
一:简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支 ...
- Python中的warnings模块详细阐述
Python中的warnings模块详细阐述 异常和警告 warnings - 非致命提醒 警告类别 警告过滤器 默认警告过滤器 可用函数 生成警告 使用模式过滤 重复警告 其他消息传递函数 由于在读 ...
- Python常用模块4-Python的datetime及time模块简介
文章目录 一.Python datetime模块介绍 1.1 有效的类型 1.2 timedelta 类对象 1.2.1 timedelta.total_seconds()方法 1.3 date对象 ...
- 【Python】OS 模块简介
文章目录 一.OS 模块简介 二.os.system 方法 三.OS 模块中的常用方法 四.参考链接 一.OS 模块简介 os 就是 "operating system" 的缩写, ...
- Python爬虫学习第二章-1-requests模块简介
Python爬虫学习第二章-1-requests模块简介 这一章主要是介绍requests模块的相关知识以及使用 1.requests模块简介: 概述:是python中原生的一款基于网络请求的模块 ...
- python paramiko详解_python paramiko模块简介
一:简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支 ...
- python :codecs模块简介
python :codecs模块简介 python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理. 有一点需要清楚的是,当python ...
- Python模块之二:Python3 常用模块总结
Python模块之二:Python3 常用模块总结 一.random模块 提供一些随机数获取的相关方法 1.常用方法 1.random():获取[0.0,1.0)范围内的浮点数 2.randint(a ...
最新文章
- 使用Canvas进行验证码识别
- HDU - 7009 树上游走(树的直径+容斥)
- vagrant 环境配置
- response php,HttpResponse.php
- 华为又对计算机视觉下手了!
- 【HTML+CSS网页设计与布局 从入门到精通】第15章-表格格式:边距/居中/边框/折叠
- c语言中专业术语及其定义,c语言中常用专业英语词汇
- BP神经网络算法基本原理,BP神经网络算法流程图
- 【回归预测】基于GPML工具箱的高斯过程回归附matlab代码
- Hi3559A 开发总结--使用docker
- APISpace 银行卡四要素API
- CRM系统有哪些效果?
- phpstudy 403 forbidden
- 你的Web系统真的安全吗?
- BZOJ3168: [Heoi2013]钙铁锌硒维生素
- 物体识别,Win7下运行TensorFlow Object Detection API详细版教程(零基础操作)
- TN.STN液晶屏常见问题及解决办法
- matlab怎么调用桌面文件,Matlab界面Desktop操作桌面简介
- 解决时间差太大导致Windows无法同步时间
- 电商后台开发之商品规格组合算法
热门文章
- 第1关:学会使用 Gensim
- AD19 双层板导出Gerber文件
- mysql 5.7.11 安装教程,MySQL数据库之mysql 5.7.11 安装配置教程
- SQL语句大全(Mysql)
- mysql数据库合库数据库合并心得
- 橡胶密封圈的作用和优点
- 练习:身高出现的频次
- 综合实践计算机的入门知识教学设计,3-6年级综合实践活动3.我是电脑小画家_教案、教学设计_市级优课(0001)【信息技术】.doc...
- linux应用/软件设置为系统服务
- PS和AI结合制作人物矢量图