1. 程式人生 > >Python基礎之告警定義與告警抑制

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

# 技術背景 在前面一篇[部落格](https://www.cnblogs.com/dechinphy/p/exception.html)中我們介紹了在python中自定義異常以及異常的捕獲。這裡我們要介紹另外一種形式的使用者提醒:告警。我們這裡就不給出一些過於官方或者技術的定義了,在實際專案中的使用場景主要有這麼一點區別:異常資訊表示程式中的某一個步驟輸入不正確而導致沒辦法繼續往下執行,但是使用者自己可以選擇抑制這些異常資訊繼續往下執行。也就是說,能否繼續執行的決定權在使用者手裡,而我們的程式後端給出的建議是終止執行。告警資訊與異常資訊的最大區別就在於,我們在程式後端就判定這個問題並不影響程式的執行,我們只播報出這個告警資訊給使用者,表明我們在後端是沒有處理這個資訊的,由使用者來決定是否修改或者終止執行。這裡我們可以看出主要的區別在於後端對這個異常事件的性質的判定,後端決定停止就丟擲異常,後端決定繼續就丟擲告警,這是實際專案中的經驗之談。 # Python告警定義 這裡有一篇[部落格](https://blog.konghy.cn/2017/12/16/python-warnings/)比較全面的介紹了在python中定義告警的類別和方法,這裡我們選取一種最容易使用也最常用的方法,直接使用`warnings.warn`的功能: ```python # 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`資訊。我們先來看下有異常情況下所丟擲的告警資訊: ```bash [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!') ``` 另外再看一下沒有滿足判定條件情況下的輸出: ```bash [dechin@dechin-manjaro warning]$ python3 warning_test.py -n No warnings! ``` 這裡從結果中可以看到,我們對告警的定義就完成了。 # Python告警抑制 在前面一篇[部落格](https://www.cnblogs.com/dechinphy/p/exception.html)中我們介紹了異常的抑制,同樣的我們也可以抑制告警資訊。但是這裡用`抑制`來形容這個行為可能並不是很合適,只是一個習慣性的叫法,因為告警本身就不影響程式的正常執行,應該說只是過濾掉告警資訊的列印輸出。告警抑制的方案也很簡單,`warnings.filterwarnings`就自帶了這個功能,具體程式碼實現如下: ```python # 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`的程式碼,過濾掉了所有的告警資訊的輸出。此外我們在程式的最後加了一行列印資訊,以確認我們在丟擲告警資訊並且被抑制之後,還能夠繼續執行後面的程式(注意,不抑制也能繼續執行)。 ```bash [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/de