Python如何输出警告信息


Posted in Python onJuly 30, 2020

问题

你希望自己的程序能生成警告信息(比如废弃特性或使用问题)。

解决方案

要输出一个警告消息,可使用 warning.warn() 函数。例如:

import warnings

def func(x, y, logfile=None, debug=False):
  if logfile is not None:
     warnings.warn('logfile argument deprecated', DeprecationWarning)
  ...

warn() 的参数是一个警告消息和一个警告类,警告类有如下几种:UserWarning, DeprecationWarning, SyntaxWarning, RuntimeWarning, ResourceWarning, 或 FutureWarning.

对警告的处理取决于你如何运行解释器以及一些其他配置。 例如,如果你使用 -W all 选项去运行Python,你会得到如下的输出:

bash % python3 -W all example.py
example.py:5: DeprecationWarning: logfile argument is deprecated
  warnings.warn('logfile argument is deprecated', DeprecationWarning)

通常来讲,警告会输出到标准错误上。如果你想讲警告转换为异常,可以使用 -W error 选项:

bash % python3 -W error example.py
Traceback (most recent call last):
  File "example.py", line 10, in <module>
    func(2, 3, logfile='log.txt')
  File "example.py", line 5, in func
    warnings.warn('logfile argument is deprecated', DeprecationWarning)
DeprecationWarning: logfile argument is deprecated
bash %

讨论

在你维护软件,提示用户某些信息,但是又不需要将其上升为异常级别,那么输出警告信息就会很有用了。 例如,假设你准备修改某个函数库或框架的功能,你可以先为你要更改的部分输出警告信息,同时向后兼容一段时间。 你还可以警告用户一些对代码有问题的使用方式。

作为另外一个内置函数库的警告使用例子,下面演示了一个没有关闭文件就销毁它时产生的警告消息:

>>> import warnings
>>> warnings.simplefilter('always')
>>> f = open('/etc/passwd')
>>> del f
__main__:1: ResourceWarning: unclosed file <_io.TextIOWrapper name='/etc/passwd'
 mode='r' encoding='UTF-8'>
>>>

默认情况下,并不是所有警告消息都会出现。-W 选项能控制警告消息的输出。 -W all 会输出所有警告消息,-W ignore 忽略掉所有警告,-W error 将警告转换成异常。 另外一种选择,你还可以使用 warnings.simplefilter() 函数控制输出。 always 参数会让所有警告消息出现,`ignore 忽略调所有的警告,error 将警告转换成异常。

对于简单的生成警告消息的情况这些已经足够了。 warnings 模块对过滤和警告消息处理提供了大量的更高级的配置选项。 更多信息请参考 Python文档

以上就是Python如何输出警告信息的详细内容,更多关于Python 输出警告信息的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python随机生成信用卡卡号的实现方法
May 14 Python
python使用reportlab实现图片转换成pdf的方法
May 22 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
Nov 24 Python
对Python中range()函数和list的比较
Apr 19 Python
详解Python循环作用域与闭包
Mar 21 Python
python实现可逆简单的加密算法
Mar 22 Python
Django 配置多站点多域名的实现步骤
May 17 Python
解决python 文本过滤和清理问题
Aug 28 Python
PyCharm第一次安装及使用教程
Jan 08 Python
Python 识别12306图片验证码物品的实现示例
Jan 20 Python
用Python爬取英雄联盟的皮肤详细示例
Dec 06 Python
python中的sys模块和os模块
Mar 20 Python
Python设计密码强度校验程序
Jul 30 #Python
详解Pandas 处理缺失值指令大全
Jul 30 #Python
Python 爬虫的原理
Jul 30 #Python
Python爬虫与反爬虫大战
Jul 30 #Python
Python如何将装饰器定义为类
Jul 30 #Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 #Python
Python3爬虫发送请求的知识点实例
Jul 30 #Python
You might like
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
PHP+ACCESS 文章管理程序代码
2010/06/21 PHP
php读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
高性能JavaScript DOM编程(1)
2015/08/11 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
2016/09/28 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
Python获取apk文件URL地址实例
2013/11/01 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
替换python字典中的key值方法
2018/07/06 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
django框架使用方法详解
2019/07/18 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
详解python对象之间的交互
2020/09/29 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
项目合作协议书范本
2014/04/16 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python
Python源码解析之List
2021/05/21 Python
python 对图片进行简单的处理
2021/06/23 Python
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL