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装饰器使用的一些建议
Jun 03 Python
python 写入csv乱码问题解决方法
Oct 23 Python
基于tensorflow加载部分层的方法
Jul 26 Python
解决Mac下首次安装pycharm无project interpreter的问题
Oct 29 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
在Python中获取操作系统的进程信息
Aug 27 Python
python同步windows和linux文件
Aug 29 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 Python
django实现日志按日期分割
May 21 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
Scrapy爬虫文件批量运行的实现
Sep 30 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 md5下16位和32位的实现代码
2008/04/09 PHP
PHP Mysql编程之高级技巧
2008/08/27 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
PHP多线程类及用法实例
2014/12/03 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
jQuery获取radio选中项的值实例
2016/06/18 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
基于Vue.js实现tab滑块效果
2017/07/23 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
python学生管理系统开发
2019/01/30 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
python实现最大优先队列
2019/08/29 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
实习鉴定评语
2014/01/19 职场文书
鉴定评语大全
2014/05/05 职场文书
英语课外活动总结
2014/08/27 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
党员转正党支部意见
2015/06/02 职场文书
关于观后感的作文
2015/06/18 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
防止web项目中的SQL注入
2021/12/06 MySQL