0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python 怎么捕獲警告(Warning)?

科技綠洲 ? 來源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-11-01 10:57 ? 次閱讀

1. 警告不是異常

你是不是經(jīng)常在使用一些系統(tǒng)庫或者第三方模塊的時候,會出現(xiàn)一些既不是異常也不是錯誤的警告信息?

這些警告信息,有時候非常多,對于新手容易造成一些誤判,以為是程序出錯了。

實(shí)則不然,異常和錯誤,都是程序出現(xiàn)了一些問題,但是警告不同,他的緊急程度非常之低,以致于大多數(shù)的警告都是可以直接忽略的。

如果不想顯示這些告警信息,可以直接加上參數(shù) -W ignore 參數(shù),就不會再顯示了。

2. 警告能捕獲嗎

能捕獲的只有錯誤異常,但是通過一系列的操作后,你可以將這些警告轉(zhuǎn)化為異常。

這樣一來,你就可以像異常一樣去捕獲他們了。

在不進(jìn)行任何設(shè)置的情況下,警告會直接打印在終端上。

圖片

3. 捕獲警告方法一

在 warnings 中有一系列的過濾器。

圖片

當(dāng)你指定為 error 的時候,就會將匹配警告轉(zhuǎn)換為異常。

之后你就可以通過異常的方式去捕獲警告了。

import warnings
warnings.filterwarnings('error')    

try:
    warnings.warn("deprecated", DeprecationWarning)
except Warning as e:
    print(e)

運(yùn)行后,效果如下

圖片

4. 捕獲警告方法二

如果你不想對在代碼中去配置將警告轉(zhuǎn)成異常。

import warnings

try:
    warnings.warn("deprecated", DeprecationWarning)
except Warning as e:
    print(e)

可以在執(zhí)行的時候,只要加上一個參數(shù) -W error ,就可以實(shí)現(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)

運(yùn)行后,效果如下

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2613

    瀏覽量

    47006
  • 終端
    +關(guān)注

    關(guān)注

    1

    文章

    1080

    瀏覽量

    29724
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84076
  • Warning
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    6996
收藏 人收藏

    評論

    相關(guān)推薦

    Eclips編譯警告,每次都有這個warning,為什么?

    Eclips編譯警告,每次都有這個warning,看起來不順眼, 不知道哪里有問題,編譯結(jié)果是沒問題的。 報錯的中間信息如下,紅色已標(biāo)注
    發(fā)表于 06-21 06:25

    fpga 警告解決辦法 Warning (10631)

    本帖最后由 eehome 于 2013-1-5 10:08 編輯 Warning (10631): VHDL Process Statement warning at kongzhi.vhd
    發(fā)表于 12-19 23:19

    從編譯警告信息(Warning)中尋找原因

    從編譯警告信息(Warning)中尋找原因在跟著韋老師視頻學(xué)習(xí)的時候,經(jīng)常發(fā)現(xiàn),我就是按照韋老師的視頻邊看邊敲的代碼,到最后為什么他都能實(shí)現(xiàn)結(jié)果,而我的程序頻繁報錯,這些問題困擾我們這些新手很長
    發(fā)表于 05-21 10:54

    quartus Warning問題(等待解答)

    因?yàn)榉抡娴臅r候一直找不到這個address,所以找到了這個警告,想問下大神們這是怎么回事?Warning (10631): VHDL Process Statement warning
    發(fā)表于 08-10 15:04

    CCS編譯出現(xiàn)警告warning: creating output section csmpasswds without SECTIONS specification

    ccs3.3中編譯出現(xiàn)如下警告:>> warning: creating output section csmpasswds without SECTIONS
    發(fā)表于 09-05 11:08

    封裝時出現(xiàn)警告Warning:Errors occurred during compilation of the project

    封裝的時候出現(xiàn)的警告Warning:Errors occurred during compilation of the project,怎么解決?
    發(fā)表于 04-15 07:34

    python捕獲警告的3種方法

    ;python3 -W error demo.pydeprecated5. 捕獲警告方法三除了上面的方法之外 ,warnings 還自帶了個捕獲警告
    發(fā)表于 03-31 16:12

    Eclips編譯警告,每次都有這個warning怎么去除?

    Eclips編譯警告,每次都有這個warning,看起來不順眼,不知道哪里有問題,編譯結(jié)果是沒問題的。報錯的中間信息如下,紅色已標(biāo)注
    發(fā)表于 02-20 07:40

    怎樣解決MDK中的警告Warning: L6305W: Image does not have an entry p...?

    怎樣解決MDK中的警告Warning: L6305W: Image does not have an entry point. (Not specified or not set due
    發(fā)表于 06-20 07:47

    "51單片機(jī)編譯警告筆記一(WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS)"

    *** WARNING L16: UNCALLED SEGMENT IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELAY_N10US?DELAY
    發(fā)表于 11-18 13:36 ?11次下載
    "51單片機(jī)編譯<b class='flag-5'>警告</b>筆記一(<b class='flag-5'>WARNING</b> L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS)"

    "51單片機(jī)WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS"

    編譯程序時出現(xiàn)如下警告WARNING L16: UNCALLED SEGMENT IGNORED FOR OVERLAY PROCESS出現(xiàn)這種警告是由于定義的函數(shù)或者代碼段常量沒有使用造成
    發(fā)表于 11-18 13:51 ?18次下載
    "51單片機(jī)<b class='flag-5'>WARNING</b> L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS"

    keil C51出現(xiàn)的警告

    (MEASURE_PROGRAM)*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNALSYMBOL: ?C?LIMULMODULE: measure program.obj (MEASURE_PROGRAM)ADDRESS: 072BHkeil C51出現(xiàn)
    發(fā)表于 12-03 20:36 ?8次下載
    keil C51出現(xiàn)的<b class='flag-5'>警告</b>

    python如何捕獲異常和主動拋出異常

    python如何主動拋出異常和捕獲異常 1. 如何拋出異常? 異常的產(chǎn)生有兩種來源: 一種是程序自動拋出,比如 1/0 會自動拋出 ZeroDivisionError 一種是開發(fā)者主動拋出
    的頭像 發(fā)表于 03-04 17:09 ?9600次閱讀

    python怎么捕獲警告

    你是不是經(jīng)常在使用一些系統(tǒng)庫或者第三方模塊的時候,會出現(xiàn)一些既不是異常也不是錯誤的警告信息?
    的頭像 發(fā)表于 03-31 16:12 ?1326次閱讀

    應(yīng)用筆記|巧用 STM32CubeIDE 之編譯警告

    關(guān)鍵字:STM32CubeIDE,warning,編譯警告 目錄預(yù)覽 1 前言 2 巧用 warning 3 小結(jié) 1. 前言 編譯警告對于工程師們來說,是再常見不過的東西了。 對于嚴(yán)
    的頭像 發(fā)表于 06-29 17:35 ?1049次閱讀
    應(yīng)用筆記|巧用 STM32CubeIDE 之編譯<b class='flag-5'>警告</b>