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字符串关键点
Dec 13 Python
python模块之re正则表达式详解
Feb 03 Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 Python
python三方库之requests的快速上手
Mar 04 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
Python随机数函数代码实例解析
Feb 09 Python
Python 给下载文件显示进度条和下载时间的实现
Apr 02 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
Window10上Tensorflow的安装(CPU和GPU版本)
Dec 15 Python
python基础入门之普通操作与函数(三)
Jun 13 Python
分享3个非常实用的 Python 模块
Mar 03 Python
python热力图实现的完整实例
Jun 25 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
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
php自动加载的两种实现方法
2010/06/21 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
解决vue addRoutes不生效问题
2020/08/04 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
[16:56]教你分分钟做大人:司夜刺客
2014/10/30 DOTA
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
python使用opencv读取图片的实例
2017/08/17 Python
Python线程创建和终止实例代码
2018/01/20 Python
Python3实现购物车功能
2018/04/18 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
Windows系统Python直接调用C++ DLL的方法
2019/08/01 Python
python sorted函数的小练习及解答
2019/09/18 Python
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
大学毕业生自我鉴定
2013/11/05 职场文书
实习协议书范本
2014/04/22 职场文书
英语教师求职信
2014/06/16 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers