warnings.warn(message, category=None, stacklevel=1, source=None)
發出警告,或者忽略它或引發異常。
category參數(如果給定)必須是警告類別類(見上文);它默認為UserWarning。
或者,消息可以是一個警告實例,在這種情況下,類別將被忽略,並且將使用消息.__ class__。
在這種情況下,消息文本將是str(消息)。
如果發出的特定警告通過上面的警告過濾器更改為錯誤,則此函數將引發異常。
stacklevel參數可以由Python編寫的包裝函數使用,如下所示:
def deprecation(message): warnings.warn(message, DeprecationWarning, stacklevel=2)
這使得警告引用deprecation()的調用者,而不是deprecation()本身的來源(因為后者會打破警告消息的目的)。
源(如果提供)是發出ResourceWarning的被破壞的對象。
版本3.6更改:添加源參數。
目前定義了以下警告類別類:
類 | 說明 ================ Warning | 這是所有警告類的基類。它是異常的子類。 UserWarning | warn()的默認類別。 DeprecationWarning | 關於不推薦使用的功能的警告的基類別(默認情況下忽略)。 SyntaxWarning | 關於可疑語法特征的警告的基類。 RuntimeWarning | 關於可疑運行時功能的警告的基類別。 FutureWarning | Base類別,用於關於將來會在語義上發生變化的構造的警告。 PendingDeprecationWarning | 關於將來不推薦使用的功能的警告的基本類別(默認情況下忽略)。 ImportWarning | 導入模塊過程中觸發的警告的基本類別(默認情況下忽略)。 UnicodeWarning | 與Unicode相關的警告的基類別。 BytesWarning | 與字節和bytearray相關的警告的基類別。 ResourceWarning | 與資源使用相關的警告的基類別。 雖然這些技術上是內置的異常,但它們在這里被記錄在案,因為在概念上它們屬於警告機制。
例子
# -*- coding: utf-8 -*-
# warnings模塊說明
import warnings
a,b= 1,23
class Twarnings(Warning):
pass
try:
assert a == 2
except Exception as e:
warnings.warn('wrong!',Twarnings)
結果
C:\Users\huangrong\Desktop\test.py:11: Twarnings: wrong! warnings.warn('wrong!',Twarnings) [Finished in 0.1s]
warnings.filterwarnings(action,message =“,category = Warning,module =”,lineno = 0,append = False)
將條目插入到過濾規范的警告列表中。
該條目默認插入前面;如果append為true,則將其插入到最后。
這將檢查參數的類型,編譯消息和模塊正則表達式,並將其作為元組插入到警告過濾器列表中。
如果兩者匹配特定的警告,則更接近列表前面的條目會覆蓋列表后面的條目。
省略的參數默認為匹配所有內容的值。
warnings.simplefilter(action, category = Warning,lineno = 0,append = False)
將一個簡單的條目插入到過濾規范的警告列表中。
函數參數的含義與filterwarnings()一樣,但不需要正則表達式,因為插入的過濾器總是匹配任何模塊中的任何消息,
只要類別和行號匹配即可。
參數說明
action是以下字符串之一: 值 | 處置 “error” | 將匹配警告轉換為異常 “ignore” | 不會打印匹配的警告 “always” | 總是打印匹配的警告 “default” | 打印發出警告的每個位置的首次出現的匹配警告 “module” | 將為發出警告的每個模塊打印首次發生的匹配警告 “once” | 僅打印第一次匹配的警告,不管位置如何 message是一個包含正則表達式的字符串,警告消息的開始必須匹配。表達式被編譯為始終不區分大小寫。 category是一個類(Warning的一個子類),其中警告類別必須是一個子類才能匹配。 module是一個包含模塊名稱必須匹配的正則表達式的字符串。表達式被編譯為區分大小寫。 lineno是發生警告的行號必須匹配的整數,或0以匹配所有行號。