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实现的系统实用log类实例
Jun 30 Python
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 Python
Python入门之三角函数全解【收藏】
Nov 08 Python
Python处理CSV与List的转换方法
Apr 19 Python
windows下安装Python的XlsxWriter模块方法
May 03 Python
用python处理图片之打开\显示\保存图像的方法
May 04 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
了解不常见但是实用的Python技巧
May 23 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
Python虚拟环境venv用法详解
May 25 Python
python字符串拼接+和join的区别详解
Dec 03 Python
python xlwt模块的使用解析
Apr 13 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
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
php分页思路以及在ZF中的使用
2012/05/30 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
一次因composer错误使用引发的问题与解决
2019/03/06 PHP
php中错误处理操作实例分析
2019/08/23 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
在Javascript里访问SharePoint列表数据的实现方法
2011/05/22 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
2017/10/26 Javascript
Vue单页及多页应用全局配置404页面实践记录
2018/05/22 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用python画个小猪佩奇的示例代码
2018/06/06 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
安装docker-compose的两种最简方法
2019/07/30 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
学院书画协会部门职责
2013/11/28 职场文书
工作自荐信
2013/12/11 职场文书
群众路线教育实践活动心得体会
2014/03/07 职场文书
小学清明节活动总结
2014/07/04 职场文书
python实现自动化群控的步骤
2021/04/11 Python