技术背景
在前面一篇博客中我们介绍了在python中自定义异常以及异常的捕获。这里我们要介绍另外一种形式的用户提醒:告警。我们这里就不给出一些过于官方或者技术的定义了,在实际项目中的使用场景主要有这么一点区别:异常信息表示程序中的某一个步骤输入不正确而导致没办法继续往下执行,但是用户自己可以选择抑制这些异常信息继续往下执行。也就是说,能否继续执行的决定权在用户手里,而我们的程序后端给出的建议是终止运行。告警信息与异常信息的最大区别就在于,我们在程序后端就判定这个问题并不影响程序的执行,我们只播报出这个告警信息给用户,表明我们在后端是没有处理这个信息的,由用户来决定是否修改或者终止运行。这里我们可以看出主要的区别在于后端对这个异常事件的性质的判定,后端决定停止就抛出异常,后端决定继续就抛出告警,这是实际项目中的经验之谈。
Python告警定义
这里有一篇博客比较全面的介绍了在python中定义告警的类别和方法,这里我们选取一种最容易使用也最常用的方法,直接使用warnings.warn
的功能:
# warning_test.py
import warnings
import sys
if sys.argv[1] == '-w':
warnings.warn('This is the warning message you wanted!')
else:
print ('No warnings!')
在这个示例代码中,我们从命令行的输入来获取参数,如果获取到命令行的参数是-w
,就抛出这个告警,在日常的项目程序中这表示一个异常情况的判定开关。如果没有满足判定条件,就打印No warnings
信息。我们先来看下有异常情况下所抛出的告警信息:
[dechin@dechin-manjaro warning]$ python3 warning_test.py -w
warning_test.py:7: UserWarning: This is the warning message you wanted!
warnings.warn('This is the warning message you wanted!')
另外再看一下没有满足判定条件情况下的输出:
[dechin@dechin-manjaro warning]$ python3 warning_test.py -n
No warnings!
这里从结果中可以看到,我们对告警的定义就完成了。
Python告警抑制
在前面一篇博客中我们介绍了异常的抑制,同样的我们也可以抑制告警信息。但是这里用抑制
来形容这个行为可能并不是很合适,只是一个习惯性的叫法,因为告警本身就不影响程序的正常运行,应该说只是过滤掉告警信息的打印输出。告警抑制的方案也很简单,warnings.filterwarnings
就自带了这个功能,具体代码实现如下:
# warning_test.py
import warnings
import sys
warnings.filterwarnings('ignore')
if sys.argv[1] == '-w':
warnings.warn('This is the warning message you wanted!')
else:
print ('No warnings!')
print ('Continue to running.')
可以看到我们只是在代码中加了一行warnings.filterwarnings
的代码,过滤掉了所有的告警信息的输出。此外我们在程序的最后加了一行打印信息,以确认我们在抛出告警信息并且被抑制之后,还能够继续执行后面的程序(注意,不抑制也能继续执行)。
[dechin@dechin-manjaro warning]$ python3 warning_test.py -w
Continue to running.
最后我们发现,告警被成功抑制,并且告警之后的程序也能够正常的运行。
总结概要
告警和异常信息的定义与处理,在网络编程项目和各种实际计算的场景中都会被用到。这里我们通过两篇博客进行了比较简单的介绍,对于没有特殊要求的用户而言,按照示例中给出的样板直接修改就能够使用。更多的时候是规范的要求,我们可能需要修改异常和告警所继承的类型。同时对于异常和告警信息,我们也能够有方案去进行抑制,更加适配各种不同的场景需求。
版权声明
本文首发链接为:https://www.cnblogs.com/dechinphy/p/warnings.html
作者ID:DechinPhy
更多原著文章请参考:https://www.cnblogs.com/dechinphy/