技术背景

在前面一篇博客中我们介绍了在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/

Python基础之告警定义与告警抑制的更多相关文章

  1. Python基础之异常定义

    技术背景 在各类python的项目中,总会涉及到项目自身相关的一些约束条件.这些约束条件体现在,当用户输入的参数或者文件不符合项目要求时,就拒绝这个参数的输入并且播报出来,提醒用户自行修改,而这一过程 ...

  2. python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数

    1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

  3. python基础知识08-类定义、属性、初始化和析构

    1.类的定义 class 类 是独立存放变量(属性/方法)的一个空间. 每个实例都是一个独立的变量空间.不同实例之间的空间互相不可见. 一个实例的特征,就是属性. 定义在类中的私有属性也可以被子类继承 ...

  4. python基础教程:定义类创建实例

    类的定义 在Python中,类通过class关键字定义,类名以大写字母开头 >>>class Person(object): #所有的类都是从object类继承 pass #pass ...

  5. Python基础--函数的定义和调用

    一.函数的作用: 提高代码的可读性,减少代码的冗余,方便调用和修改,组织结构清晰 二.函数的定义:函数遵循先定义后调用的原则 1.无参函数 def funcname(): #def 是关键字,后跟函数 ...

  6. Python基础之函数定义及文件修改

    函数 函数的定义 #登录函数和注册函数 def register(): """注册函数""" username = input('请输入你的 ...

  7. python基础—装饰器

    python基础-装饰器 定义:一个函数,可以接受一个函数作为参数,对该函数进行一些包装,不改变函数的本身. def foo(): return 123 a=foo(); b=foo; print(a ...

  8. python基础实践 -python是一门动态解释性的强类型定义语言

    python是一门动态解释性的强类型定义语言 Python能做什么? Python是一门综合性的语言,你几乎能在计算机上通过Python做任何事情,以下是Python应该最广泛的几个方面: 1.网络应 ...

  9. 『Python基础-3』变量、定义变量、变量类型、关键字Python基础-3』变量、定义变量、变量类型、关键字

    『Python基础-3』变量.定义变量.变量类型.关键字 目录: 1.Python变量.变量的命名 2.变量的类型(Python数据类型) 3.Python关键字 1. Python 变量.变量的命名 ...

随机推荐

  1. 蓝湖 UI 设计稿上如何生成渐变色和复制渐变色

    蓝湖 UI 设计稿上如何生成渐变色和复制渐变色 Sketch 生成渐变色 不要上传图片,切图 如果是切图,切图模式下就不会生成 css 代码了 复制渐变色 OK .button { width: 28 ...

  2. Electron Security All In One

    Electron Security All In One https://www.electronjs.org/docs/tutorial/security CSP Content-Security- ...

  3. TypeScript & Advanced Types

    TypeScript & Advanced Types https://www.typescriptlang.org/docs/handbook/advanced-types.html#typ ...

  4. js generator和yield

    function co<T>(fn: () => Generator<any, any, any>): Promise<T> { const g: Gener ...

  5. .Net Core 3.1浏览器后端服务(三) Swagger引入与应用

    一.前言 前后端分离的软件开发方式已逐步成为互联网项目开发的业界标准,前后端分离带来了诸多好处的同时,也带来了一些弊端. 接口文档的维护就是其中之一,起初前后端约定文档规范,开发的很愉快,随着时间推移 ...

  6. RabbitMq手动确认时的重试机制

    本文转载自RabbitMq手动确认时的重试机制 消息手动确认模式的几点说明 监听的方法内部必须使用channel进行消息确认,包括消费成功或消费失败 如果不手动确认,也不抛出异常,消息不会自动重新推送 ...

  7. epoll使用

    epoll通过下面3个epoll系统调用为用户提供服务. (1)epoll_create系统调用 epoll_create在C库中的原型如下: int epoll_create(int size); ...

  8. hutool的DateUtil工具类

    1.0.DateUitl(日期时间) 0)坐标 <dependency> <groupId>cn.hutool</groupId> <artifactId&g ...

  9. CentOS7安装Kafka2.6.0

    1:下载 wget https://mirror.bit.edu.cn/apache/kafka/2.6.0/kafka_2.12-2.6.0.tgz 点击前往官网 2:解压 tar -zxvf ka ...

  10. Nearby Service新特性:Wi-Fi分享

    PART 1: Wi-Fi分享功能介绍 朋友来家里做客.顾客到店里用餐-当他们想要给自己的手机链接Wi-Fi时,总免不了询问Wi-Fi名称和密码..这种问密码和给密码的过程十分麻烦,常常还会有听错或者 ...