Python基礎之告警定義與告警抑制


技術背景

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM