1. 警告不是異常
你是不是經(jīng)常在使用一些系統(tǒng)庫或者第三方模塊的時候,會出現(xiàn)一些既不是異常也不是錯誤的警告信息?
這些警告信息,有時候非常多,對于新手容易造成一些誤判,以為是程序出錯了。
實則不然,異常和錯誤,都是程序出現(xiàn)了一些問題,但是警告不同,他的緊急程度非常之低,以致于大多數(shù)的警告都是可以直接忽略的。
如果不想顯示這些告警信息,可以直接加上參數(shù) -W ignore
參數(shù),就不會再顯示了。
2. 警告能捕獲嗎
能捕獲的只有錯誤異常,但是通過一系列的操作后,你可以將這些警告轉(zhuǎn)化為異常。
這樣一來,你就可以像異常一樣去捕獲他們了。
在不進行任何設置的情況下,警告會直接打印在終端上。
3. 捕獲警告方法一
在 warnings 中有一系列的過濾器。
當你指定為 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 還自帶了個捕獲警告的上下文管理器。
當你加上 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)
運行后,效果如下
-
模塊
+關注
關注
7文章
2670瀏覽量
47340 -
終端
+關注
關注
1文章
1114瀏覽量
29831 -
python
+關注
關注
56文章
4782瀏覽量
84453 -
Warning
+關注
關注
0文章
4瀏覽量
7037
發(fā)布評論請先 登錄
相關推薦
評論