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基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
python使用PyCharm进行远程开发和调试
Nov 02 Python
Python中交换两个元素的实现方法
Jun 29 Python
python 将列表中的字符串连接成一个长路径的方法
Oct 23 Python
flask框架单元测试原理与用法实例分析
Jul 23 Python
python3.6中@property装饰器的使用方法示例
Aug 17 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
Nov 21 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
python里反向传播算法详解
Nov 22 Python
python爬虫--selenium模块
Mar 31 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
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
php实现的通用图片处理类
2015/03/24 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
PHP中Session可能会引起并发问题
2015/06/26 PHP
thinkphp整合系列之极验滑动验证码geetest功能
2019/06/18 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
js中将String转换为number以便比较
2014/07/08 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
基于jQuery实现搜索关键字自动匹配功能
2020/03/26 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
Vue 3.0 前瞻Vue Function API新特性体验
2019/08/12 Javascript
js实现表格数据搜索
2020/08/09 Javascript
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python分布式环境下的限流器的示例
2017/10/26 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
python实现拼图小游戏
2020/02/22 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
数据库面试要点基本概念
2013/10/31 面试题
员工自我鉴定
2013/10/09 职场文书
室内设计专业学生的自我评价分享
2013/11/27 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
教师节活动主持词
2014/04/02 职场文书
2014年英语工作总结
2014/12/20 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书