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 相关文章推荐
python3生成随机数实例
Oct 20 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
Jun 30 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
Oct 16 Python
Python检查 云备份进程是否正常运行代码实例
Aug 22 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
Aug 24 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
win10系统下python3安装及pip换源和使用教程
Jan 06 Python
Python面向对象魔法方法和单例模块代码实例
Mar 25 Python
深入了解Python enumerate和zip
Jul 16 Python
python3 删除所有自定义变量的操作
Apr 08 Python
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 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
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
php实现的双向队列类实例
2014/09/24 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
简单三步,搞掂内存泄漏
2007/03/10 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
js中window.open打开一个新的页面
2014/08/10 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
使用递归遍历对象获得value值的实现方法
2016/06/14 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
python计算两个矩形框重合百分比的实例
2018/11/07 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
python tkinter canvas使用实例
2019/11/04 Python
python爬虫容易学吗
2020/06/02 Python
Python celery原理及运行流程解析
2020/06/13 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
销售文员的岗位职责
2013/11/20 职场文书
化工专业个人的求职信范文
2013/11/28 职场文书
毕业生大学生活自我总结
2014/01/31 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
竞赛口号大全
2014/06/16 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
Java数据结构之堆(优先队列)
2022/05/20 Java/Android