」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Python 中的警告過濾器

Python 中的警告過濾器

發佈於2024-11-08
瀏覽:507

Warning Filter in Python

Buy Me a Coffee☕

*My post explains Warning with warn() in Python.

A warnings filter can set which warnings to show using these filters(actions) below. *"once" may not work properly:

Value Disposition
"default" print the first occurrence of matching warnings for each location (module line number) where the warning is issued
"error" turn matching warnings into exceptions
"ignore" never print matching warnings
"always" always print matching warnings
"module" print the first occurrence of matching warnings for each module where the warning is issued (regardless of line number)
"once" print only the first occurrence of matching warnings, regardless of location

By default, these filters below are set to warnings.filters and they can be reset with resetwarnings() as shown below:

import warnings

print(warnings.filters)
# [('default', None, , '__main__', 0),
#  ('ignore', None, , None, 0),
#  ('ignore', None, , None, 0),
#  ('ignore', None, , None, 0),
#  ('ignore', None, , None, 0)]

warnings.resetwarnings()

print(warnings.filters)
# []

Now, filterwarnings() or simplefilter() can filter warnings as shown below:

*Memos for filterwarnings():

  • The 1st argument is action(Required-Type:str). *"default", "error", "ignore", "always", "module" or "once" can be set.
  • The 2nd argument is message(Optional-Default:""-Type:str).
  • The 3rd argument is category(Optional-Default:Warning-Type:Warning).
  • The 4th argument is module(Optional-Default:""-Type:str). *It may not work properly.
  • The 5th argument is lineno(Optional-Default:0-Type:int): *Memos:
    • It decides a line number.
    • It must be x >= 0.
  • The 6th argument is append(Optional-Default:False-Type:bool). *If it's False, a filter is add before other filters while if it's True, a filter is add after other filters.

*Memos for simplefilter():

  • The 1st argument is action(Required-Type:str). *"default", "error", "ignore", "always", "module" or "once" can be set.
  • The 2nd argument is category(Optional-Default:Warning-Type:Warning).
  • The 3rd argument is lineno(Optional-Default:0-Type:int): *Memos:
    • It decides a line number.
    • It must be x >= 0.
  • The 4th argument is append(Optional-Default:False-Type:bool). *If it's False, a filter is add before other filters while if it's True, a filter is add after other filters.
my_project
 |-main.py
 |-file1.py(module)
 └-file2.py(module)

file1.py:

import warnings                                                 # Line 1
                                                                # Line 2
warnings.warn(message="Warning 1", category=UserWarning)        # Line 3
warnings.warn(message="Warning 2", category=DeprecationWarning) # Line 4
warnings.warn(message="Warning 2", category=DeprecationWarning) # Line 5
warnings.warn(message="Warning 3", category=UserWarning)        # Line 6

file2.py:

import warnings                                                 # Line 1
                                                                # Line 2
warnings.warn(message="Warning 1", category=UserWarning)        # Line 3
warnings.warn(message="Warning 2", category=DeprecationWarning) # Line 4
warnings.warn(message="Warning 2", category=DeprecationWarning) # Line 5
warnings.warn(message="Warning 3", category=UserWarning)        # Line 6

main.py with "default" filter(action):

import warnings

warnings.resetwarnings()

warnings.filterwarnings(action="default")
warnings.filterwarnings(action="default", message="", category=Warning,
                        module="", lineno=0, append=False)
warnings.simplefilter(action="default")
warnings.simplefilter(action="default", category=Warning,
                      lineno=0, append=False)
print(warnings.filters)
# [('default', None, , None, 0)]

import file1, file2
# ...\my_project\file1.py:3: UserWarning: Warning 1
#   warnings.warn(message="Warning 1", category=UserWarning)
# ...\my_project\file1.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file1.py:5: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file1.py:6: UserWarning: Warning 3
#   warnings.warn(message="Warning 3", category=UserWarning)
# ...\my_project\file2.py:3: UserWarning: Warning 1
#   warnings.warn(message="Warning 1", category=UserWarning)
# ...\my_project\file2.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file2.py:5: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file2.py:6: UserWarning: Warning 3
#   warnings.warn(message="Warning 3", category=UserWarning)

main.py with "error" filter(action):

import warnings

warnings.resetwarnings()

warnings.filterwarnings(action="error")
warnings.simplefilter(action="error")

print(warnings.filters)
# [('error', None, , None, 0)]

import file1, file2
# ...\my_project\file1.py", line 3, in 
#     warnings.warn(message="Warning 1", category=UserWarning)
# UserWarning: Warning 1

main.py with "ignore" filter(action):

import warnings

warnings.resetwarnings()

warnings.filterwarnings(action="ignore")
warnings.simplefilter(action="ignore")

print(warnings.filters)
# [('ignore', None, , None, 0)]

import file1, file2 # Warnings are not shown
import warnings

warnings.resetwarnings()

warnings.filterwarnings(action="ignore", category=UserWarning)
warnings.simplefilter(action="ignore", category=UserWarning)

print(warnings.filters)
# [('ignore', None, , None, 0)]

import file1, file2
# ...\my_project\file1.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file1.py:5: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file2.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file2.py:5: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
import warnings

warnings.resetwarnings()

warnings.filterwarnings(action="ignore", message="Warning 1", 
                        category=UserWarning)
print(warnings.filters)
# [('ignore', re.compile('Warning 1', re.IGNORECASE),
#  , None, 0)]

import file1, file2
# ...\my_project\file1.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file1.py:5: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file1.py:6: UserWarning: Warning 3
#   warnings.warn(message="Warning 3", category=UserWarning)
# ...\my_project\file2.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file2.py:5: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file2.py:6: UserWarning: Warning 3
#   warnings.warn(message="Warning 3", category=UserWarning)
import warnings

warnings.resetwarnings()

warnings.filterwarnings(action="ignore", lineno=6)
warnings.simplefilter(action="ignore", lineno=6)

print(warnings.filters)
# [('ignore', None, , None, 6)]

import file1, file2
# ...\my_project\file1.py:3: UserWarning: Warning 1
#   warnings.warn(message="Warning 1", category=UserWarning)
# ...\my_project\file1.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file1.py:5: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file2.py:3: UserWarning: Warning 1
#   warnings.warn(message="Warning 1", category=UserWarning)
# ...\my_project\file2.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file2.py:5: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)

main.py with "always" filter(action):

import warnings

warnings.resetwarnings()

warnings.filterwarnings(action="always")
warnings.simplefilter(action="always")

print(warnings.filters)
# [('always', None, , None, 0)]

import file1, file2
# ...\my_project\file1.py:3: UserWarning: Warning 1
#   warnings.warn(message="Warning 1", category=UserWarning)
# ...\my_project\file1.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file1.py:5: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file1.py:6: UserWarning: Warning 3
#   warnings.warn(message="Warning 3", category=UserWarning)
# ...\my_project\file2.py:3: UserWarning: Warning 1
#   warnings.warn(message="Warning 1", category=UserWarning)
# ...\my_project\file2.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file2.py:5: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file2.py:6: UserWarning: Warning 3
#   warnings.warn(message="Warning 3", category=UserWarning)

main.py with "module" filter(action):

import warnings

warnings.resetwarnings()

warnings.filterwarnings(action="module")
warnings.simplefilter(action="module")

print(warnings.filters)
# [('module', None, , None, 0)]

import file1, file2
# ...\my_project\file1.py:3: UserWarning: Warning 1
#   warnings.warn(message="Warning 1", category=UserWarning)
# ...\my_project\file1.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file1.py:6: UserWarning: Warning 3
#   warnings.warn(message="Warning 3", category=UserWarning)
# ...\my_project\file2.py:3: UserWarning: Warning 1
#   warnings.warn(message="Warning 1", category=UserWarning)
# ...\my_project\file2.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file2.py:6: UserWarning: Warning 3
#   warnings.warn(message="Warning 3", category=UserWarning)

main.py with "once" filter(action):

import warnings

warnings.resetwarnings()

warnings.filterwarnings(action="once")
warnings.simplefilter(action="once")

print(warnings.filters)
# [('once', None, , None, 0)]

import file1, file2
# ...\my_project\file1.py:3: UserWarning: Warning 1
#   warnings.warn(message="Warning 1", category=UserWarning)
# ...\my_project\file1.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file1.py:6: UserWarning: Warning 3
#   warnings.warn(message="Warning 3", category=UserWarning)
# ...\my_project\file2.py:3: UserWarning: Warning 1
#   warnings.warn(message="Warning 1", category=UserWarning)
# ...\my_project\file2.py:4: DeprecationWarning: Warning 2
#   warnings.warn(message="Warning 2", category=DeprecationWarning)
# ...\my_project\file2.py:6: UserWarning: Warning 3
#   warnings.warn(message="Warning 3", category=UserWarning)

main.py with append argument. *If append=False, a filter is add before other filters while if append=True, a filter is add after other filters:

import warnings

warnings.resetwarnings()

print(warnings.filters)
# []

warnings.filterwarnings(action="default", append=False)
warnings.simplefilter(action="default", append=False)

print(warnings.filters)
# [('default', None, , None, 0)]

warnings.filterwarnings(action="always", append=False)
warnings.simplefilter(action="always", append=False)

print(warnings.filters)
# [('always', None, , None, 0),
#  ('default', None, , None, 0)]

warnings.filterwarnings(action="once", append=True)
warnings.simplefilter(action="once", append=True)

print(warnings.filters)
# [('always', None, , None, 0),
#  ('default', None, , None, 0),
#  ('once', None, , None, 0)]
版本聲明 本文轉載於:https://dev.to/hyperkai/warning-filter-in-python-4g0e?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • WebCodec - 發送和接收
    WebCodec - 發送和接收
    介绍 你好! ? 在本教程中,我将向您展示如何使用 WebCodec API 发送和接收视频。 首先让我们对服务器进行编码。 设置服务器 为了在对等点之间发送和接收数据包,我们需要一个 websocket 服务器。 为此,我们将使用 Nodejs 创建一个非常基...
    程式設計 發佈於2024-11-08
  • 為什麼 PHP ftp_put() 失敗:分析與解決問題
    為什麼 PHP ftp_put() 失敗:分析與解決問題
    PHP ftp_put 失敗:分析問題並解決它傳輸時ftp_put() 無法正常運行可能是一個令人沮喪的問題通過FTP 傳輸檔案。在 PHP 中,此問題的常見原因在於預設使用主動模式。 主動與被動模式傳輸主動模式指示 FTP 伺服器連接到指定連接埠上的用戶端。另一方面,被動模式讓伺服器偵聽隨機端口,...
    程式設計 發佈於2024-11-08
  • 如何從字串中刪除非數字字符,同時保留 Java 中的小數位分隔符?
    如何從字串中刪除非數字字符,同時保留 Java 中的小數位分隔符?
    在刪除Java 字串中的非數字字元時保留小數分隔符號使用Java 字串時,可能會出現您需要的情況刪除所有非數字字符,同時保留小數點分隔符。使用正規表示式和replaceAll()方法可以有效地實現這一點。 為了解決這個問題,我們可以使用以下程式碼片段:String str = "a12.3...
    程式設計 發佈於2024-11-08
  • 如何重新排列 MySQL 中的欄位以提高資料視覺性和查詢效率?
    如何重新排列 MySQL 中的欄位以提高資料視覺性和查詢效率?
    有效地重新排列 MySQL 列以增強可見性當列沒有最佳排序時,查詢大型資料庫可能會很麻煩。本文提供了一個全面的解決方案,可以輕鬆地重新排列現有列,優化表的可見性而不影響其資料完整性。 要修改列的位置,請使用「ALTER TABLE」指令,後面接著「MODIFY」子句。此語法允許您透過在指定的引用列之...
    程式設計 發佈於2024-11-08
  • 如何正確使用 getElementsByClassName 並根據事件更改元素樣式?
    如何正確使用 getElementsByClassName 並根據事件更改元素樣式?
    使用 getElementsByClassName 更改元素樣式getElementsByClassName 讓您選擇具有相同類別名稱的多個元素。在給出的範例中,程式碼旨在當事件發生在具有特定類別名稱的所有 div 之外時更改這些 div 的背景顏色。 問題診斷The提供的程式碼有一些問題: get...
    程式設計 發佈於2024-11-08
  • 為什麼我的畫布圖像無法繪製?異步圖像載入的重要性。
    為什麼我的畫布圖像無法繪製?異步圖像載入的重要性。
    繪圖前等待圖像加載嘗試將圖像添加到畫布時,請確保圖像在繪製之前加載至關重要試圖畫它。您在程式碼中遇到的問題是由於圖像載入的非同步性質造成的。 要解決此問題,您需要在映像的 onload 事件中新增回呼函數。此回調函數將在圖像載入完成時執行,確保在嘗試繪製圖像之前圖像資料可用。 下面更正的程式碼將等待...
    程式設計 發佈於2024-11-08
  • Golang 中的 LeetCode:解析布林表達式
    Golang 中的 LeetCode:解析布林表達式
    這是我喜歡解決的 LeetCode 問題之一。我用 Golang 解決了這個問題,而且我已經是一個 Go 新手了,剛開始學習一週。 直覺 這個問題是實現計算器程式的另一個版本,該程式接受一個字串並對其進行計算。您必須透過評估內部括號和外部括號來解決問題,直到您得到最終結果。這些問題...
    程式設計 發佈於2024-11-08
  • 預防 XSS 攻擊的方法:綜合指南
    預防 XSS 攻擊的方法:綜合指南
    1.什麼是XSS? XSS(即跨站腳本)是 Web 應用程式中發現的安全漏洞。它允許攻擊者將惡意腳本(通常是 JavaScript)注入到其他使用者查看的網頁中。這可能會導致未經授權的操作、資料竊取或會話劫持。 1.1. XSS 攻擊的類型 XSS攻擊一般分為三類...
    程式設計 發佈於2024-11-08
  • Laravel 的全新 Cache::flexible()
    Laravel 的全新 Cache::flexible()
    每次點擊路線時都等待大型資料集進行計算真是太糟糕了!而且用戶不想等待,現在每個人的保留時間都很短,所以我們幾年前就透過使用快取修復了這個問題。 Laravel 有一個 Cache Fascad 來幫助我們快取數據,我們一直在使用 Cache::remember(),這是一個很好的方法來快取一些資料一...
    程式設計 發佈於2024-11-08
  • 組裝中的 Web 應用程式!
    組裝中的 Web 應用程式!
    MOS 6502 是經濟實惠運算領域的一大進步。感謝這個小傢伙,我們了解了 Commodore64、Apple II、 Atari2600 和 NES。直到今天,人們仍在使用 6502 Assembly,為這些被遺忘的平台創建軟體和遊戲。 現在,讓我介紹一下自己 - 我是Cassiopeia(但是...
    程式設計 發佈於2024-11-08
  • 使用 SCSS Mixins 和函數讓你的 CSS 變得更好
    使用 SCSS Mixins 和函數讓你的 CSS 變得更好
    SCSS 是 CSS 的擴展,可讓您的程式碼更容易管理。借助 SCSS,您可以使用 mixin 和函數來幫助您避免一次又一次編寫相同的程式碼。在本文中,我將向您展示一些有用的 SCSS mixins 和函數,它們可以節省您的時間並使您的程式碼更清晰。 為什麼要用 Mixins 和 Function...
    程式設計 發佈於2024-11-08
  • ## Scopelint 錯誤:在範圍範圍內使用變數 - 如何安全地引用函數文字中的循環變數?
    ## Scopelint 錯誤:在範圍範圍內使用變數 - 如何安全地引用函數文字中的循環變數?
    Scopelint 錯誤:在範圍範圍上使用變數Scopelint 錯誤:在範圍範圍上使用變數for _, x := range tests { t.Run(x.description, func(t *testing.T) { client := fake.NewSimple...
    程式設計 發佈於2024-11-08
  • 實現平滑滾動以獲得更好的用戶體驗。
    實現平滑滾動以獲得更好的用戶體驗。
    平滑滾動是一項現代微動畫功能,可透過允許在頁面各部分之間輕鬆導航來增強使用者體驗。平滑滾動不是立即跳到各個部分,而是創造流暢、引人入勝的過渡。這是一種保持用戶參與度的好方法,而又不會因為突然的跳轉而讓他們不知所措。 在本文中,我們將探討兩種實現平滑滾動的方法: 使用 CSS 使用 JavaScri...
    程式設計 發佈於2024-11-08
  • ## 使用 CURLOPT_RETURNTRANSFER 時,為什麼 Curl 返回「18:傳輸已關閉,剩餘未完成的讀取資料」?
    ## 使用 CURLOPT_RETURNTRANSFER 時,為什麼 Curl 返回「18:傳輸已關閉,剩餘未完成的讀取資料」?
    解決未完成讀取資料的傳輸關閉錯誤使用curl執行資料檢索有時可能會產生錯誤訊息,特別是在使用CURLOPT_RETURNTRANSFER時儲存資料以供日後檢索。此錯誤「18:傳輸已關閉,剩餘未完成的讀取資料」可能會導致資料不完整。 一個值得注意的方面是,當 CURLOPT_RETURNTRANSFE...
    程式設計 發佈於2024-11-08
  • python 程式列表
    python 程式列表
    我的清單建立 mylist=["singam","山羊","rayyan","leo"] 列印(我的清單) 列印(我的清單[2]) mylist[1]="mersal" 列印(我的清單) mylist...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3