1. 警告不是異常
你是不是經(jīng)常在使用一些系統(tǒng)庫(kù)或者第三方模塊的時(shí)候,會(huì)出現(xiàn)一些既不是異常也不是錯(cuò)誤的警告信息?
這些警告信息,有時(shí)候非常多,對(duì)于新手容易造成一些誤判,以為是程序出錯(cuò)了。
實(shí)則不然,異常和錯(cuò)誤,都是程序出現(xiàn)了一些問(wèn)題,但是警告不同,他的緊急程度非常之低,以致于大多數(shù)的警告都是可以直接忽略的。
如果不想顯示這些告警信息,可以直接加上參數(shù) -W ignore
參數(shù),就不會(huì)再顯示了。
2. 警告能捕獲嗎
能捕獲的只有錯(cuò)誤異常,但是通過(guò)一系列的操作后,你可以將這些警告轉(zhuǎn)化為異常。
這樣一來(lái),你就可以像異常一樣去捕獲他們了。
在不進(jìn)行任何設(shè)置的情況下,警告會(huì)直接打印在終端上。
3. 捕獲警告方法一
在 warnings 中有一系列的過(guò)濾器。
當(dāng)你指定為 error 的時(shí)候,就會(huì)將匹配警告轉(zhuǎn)換為異常。
之后你就可以通過(guò)異常的方式去捕獲警告了。
import warnings
warnings.filterwarnings('error')
try:
warnings.warn("deprecated", DeprecationWarning)
except Warning as e:
print(e)
運(yùn)行后,效果如下
4. 捕獲警告方法二
如果你不想對(duì)在代碼中去配置將警告轉(zhuǎn)成異常。
import warnings
try:
warnings.warn("deprecated", DeprecationWarning)
except Warning as e:
print(e)
可以在執(zhí)行的時(shí)候,只要加上一個(gè)參數(shù) -W error
,就可以實(shí)現(xiàn)一樣的效果
$ python3 -W error demo.py
deprecated
5. 捕獲警告方法三
除了上面的方法之外 ,warnings 還自帶了個(gè)捕獲警告的上下文管理器。
當(dāng)你加上 record=True
它會(huì)返回一個(gè)列表,列表里存放的是所有捕獲到的警告,我將它賦值為 w
,然后就可以將它打印出來(lái)了。
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)
運(yùn)行后,效果如下
-
模塊
+關(guān)注
關(guān)注
7文章
2735瀏覽量
47755 -
終端
+關(guān)注
關(guān)注
1文章
1156瀏覽量
30006 -
python
+關(guān)注
關(guān)注
56文章
4807瀏覽量
85040 -
Warning
+關(guān)注
關(guān)注
0文章
4瀏覽量
7061
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Eclips編譯警告,每次都有這個(gè)warning,為什么?
fpga 警告解決辦法 Warning (10631)
從編譯警告信息(Warning)中尋找原因
quartus Warning問(wèn)題(等待解答)
CCS編譯出現(xiàn)警告warning: creating output section csmpasswds without SECTIONS specification
封裝時(shí)出現(xiàn)警告Warning:Errors occurred during compilation of the project
python捕獲警告的3種方法
Eclips編譯警告,每次都有這個(gè)warning怎么去除?
怎樣解決MDK中的警告:Warning: L6305W: Image does not have an entry p...?
"51單片機(jī)編譯警告筆記一(WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS)"
!["51單片機(jī)編譯<b class='flag-5'>警告</b>筆記一(<b class='flag-5'>WARNING</b> L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS)"](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
"51單片機(jī)WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS"
!["51單片機(jī)<b class='flag-5'>WARNING</b> L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS"](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
keil C51出現(xiàn)的警告
![keil C51出現(xiàn)的<b class='flag-5'>警告</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
python如何捕獲異常和主動(dòng)拋出異常
python怎么捕獲警告
應(yīng)用筆記|巧用 STM32CubeIDE 之編譯警告
![應(yīng)用筆記|巧用 STM32CubeIDE 之編譯<b class='flag-5'>警告</b>](https://file1.elecfans.com/web2/M00/8E/60/wKgaomTEzgSANIW0AAAfVwbjV1w543.png)
評(píng)論