Python編程中如何捕獲警告ps不是捕獲異常
1. 警告不是異常
你是不是經(jīng)常在使用一些系統(tǒng)庫或者第三方模塊的時候,會出現(xiàn)一些既不是異常也不是錯誤的警告信息?
這些警告信息,有時候非常多,對于新手容易造成一些誤判,以為是程序出錯了。
實則不然,異常和錯誤,都是程序出現(xiàn)了一些問題,但是警告不同,他的緊急程度非常之低,以致于大多數(shù)的警告都是可以直接忽略的。
如果不想顯示這些告警信息,可以直接加上參數(shù) -W ignore 參數(shù),就不會再顯示了。
2. 警告能捕獲嗎
能捕獲的只有錯誤異常,但是通過一系列的操作后,你可以將這些警告轉(zhuǎn)化為異常。
這樣一來,你就可以像異常一樣去捕獲他們了。
在不進行任何設(shè)置的情況下,警告會直接打印在終端上。

3. 捕獲警告方法一
在 warnings 中有一系列的過濾器。
| 值 | 處置 |
|---|---|
| default | 為發(fā)出警告的每個位置(模塊+行號)打印第一個匹配警告 |
| error | 將匹配警告轉(zhuǎn)換為異常 |
| ignore | 從不打印匹配的警告 |
| always | 總是打印匹配的警告 |
| module | 為發(fā)出警告的每個模塊打印第一次匹配警告(無論行號如何) |
| once | 無論位置如何,僅打印第一次出現(xiàn)的匹配警告 |
當(dāng)你指定為 error 的時候,就會將匹配警告轉(zhuǎn)換為異常。
之后你就可以通過異常的方式去捕獲警告了。
import warnings
warnings.filterwarnings('error')
try:
warnings.warn("deprecated", DeprecationWarning)
except Warning as e:
print(e)
運行后,效果如下

4. 捕獲警告方法二
如果你不想對在代碼中去配置將警告轉(zhuǎn)成異常。
import warnings
try:
warnings.warn("deprecated", DeprecationWarning)
except Warning as e:
print(e)
可以在執(zhí)行的時候,只要加上一個參數(shù) -W error ,就可以實現(xiàn)一樣的效果
$ python3 -W error demo.py deprecated
5. 捕獲警告方法三
除了上面的方法之外 ,warnings 還自帶了個捕獲警告的上下文管理器。
當(dāng)你加上 record=True 它會返回一個列表,列表里存放的是所有捕獲到的警告,我將它賦值為 w,然后就可以將它打印出來了。
import warnings
def do_warning():
warnings.warn("deprecated", DeprecationWarning)
with warnings.catch_warnings(record=True) as w:
do_warning()
if len(w) >0:
print(w[0].message)
運行后,效果如下

文章最后給大家介紹三個我自己寫的在線文檔:
第一個文檔:PyCharm 中文指南 1.0 文檔
花了兩個多月的時間,整理了 100 個 PyCharm 的使用技巧,為了讓新手能夠直接上手,我花了很多的時間錄制了上百張 GIF 動圖,有興趣的前往在線文檔閱讀。

第二個文檔:PyCharm 黑魔法指南 1.0 文檔
系統(tǒng)收錄各種 Python 冷門知識,Python Shell 的多樣玩法,令人瘋狂的 Python 炫技操作,Python 的超詳細進階知識解讀,非常實用的 Python 開發(fā)技巧等。

第三個文檔:Python 中文指南 1.0 文檔
花了三個月時間寫的一本 適合零基礎(chǔ)入門 Python 的全中文教程,搭配大量的代碼案例,讓初學(xué)者對 代碼的運作效果有一個直觀感受,教程既有深度又有廣度,每篇文章都會標(biāo)內(nèi)容的難度,是基礎(chǔ)還是進階的,可供讀者進行選擇,是一本難得的 Python 中文電子教程。

以上就是Python捕獲警告ps不是捕獲異常的詳細內(nèi)容,更多關(guān)于Python捕獲警告的資料請關(guān)注本站其它相關(guān)文章!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信