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中map,reduce,filter和sorted函数的使用方法
Aug 17 Python
Python利用Django如何写restful api接口详解
Jun 08 Python
python读取文本绘制动态速度曲线
Jun 21 Python
python使用正则筛选信用卡
Jan 27 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
3种python调用其他脚本的方法
Jan 06 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
python re模块和正则表达式
Mar 24 Python
python tkinter模块的简单使用
Apr 07 Python
Python何绘制带有背景色块的折线图
Apr 23 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/25 PHP
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
js弹性势能动画之抛物线运动实例详解
2017/07/27 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
[50:02]完美世界DOTA2联赛PWL S2 Magma vs FTD 第三场 11.29
2020/12/03 DOTA
wxPython窗口的继承机制实例分析
2014/09/28 Python
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
python 字符串常用函数详解
2019/09/11 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
小学音乐教学反思
2014/02/05 职场文书
高中毕业自我评价
2014/02/08 职场文书
优乐美广告词
2014/03/14 职场文书
社团活动总结
2014/04/28 职场文书
师德师风建设方案
2014/05/08 职场文书
后勤个人工作总结
2015/02/28 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
Oracle 死锁的检测查询及处理
2021/09/25 Oracle
Java版 单机五子棋
2022/05/04 Java/Android
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android