Python如何輸出警告資訊
問題
你希望自己的程式能生成警告資訊(比如廢棄特性或使用問題)。
解決方案
要輸出一個警告訊息,可使用 warning.warn()
函式。例如:
import warnings def func(x,y,logfile=None,debug=False): if logfile is not None: warnings.warn('logfile argument deprecated',DeprecationWarning) ...
warn()
的引數是一個警告訊息和一個警告類,警告類有如下幾種:UserWarning,DeprecationWarning,SyntaxWarning,RuntimeWarning,ResourceWarning,或 FutureWarning.
對警告的處理取決於你如何執行直譯器以及一些其他配置。 例如,如果你使用 -W all
選項去執行Python,你會得到如下的輸出:
bash % python3 -W all example.py
example.py:5: DeprecationWarning: logfile argument is deprecated
warnings.warn('logfile argument is deprecated',DeprecationWarning)
通常來講,警告會輸出到標準錯誤上。如果你想講警告轉換為異常,可以使用 -W error
選項:
bash % python3 -W error example.py
Traceback (most recent call last):
File "example.py",line 10,in <module>
func(2,3,logfile='log.txt')
File "example.py",line 5,in func
warnings.warn('logfile argument is deprecated',DeprecationWarning)
DeprecationWarning: logfile argument is deprecated
bash %
討論
在你維護軟體,提示使用者某些資訊,但是又不需要將其上升為異常級別,那麼輸出警告資訊就會很有用了。 例如,假設你準備修改某個函式庫或框架的功能,你可以先為你要更改的部分輸出警告資訊,同時向後相容一段時間。 你還可以警告使用者一些對程式碼有問題的使用方式。
作為另外一個內建函式庫的警告使用例子,下面演示了一個沒有關閉檔案就銷燬它時產生的警告訊息:
>>> import warnings >>> warnings.simplefilter('always') >>> f = open('/etc/passwd') >>> del f __main__:1: ResourceWarning: unclosed file <_io.TextIOWrapper name='/etc/passwd' mode='r' encoding='UTF-8'> >>>
預設情況下,並不是所有警告訊息都會出現。-W 選項能控制警告訊息的輸出。 -W all 會輸出所有警告訊息,-W ignore 忽略掉所有警告,-W error 將警告轉換成異常。 另外一種選擇,你還可以使用 warnings.simplefilter()
函式控制輸出。 always 引數會讓所有警告訊息出現,`ignore 忽略調所有的警告,error 將警告轉換成異常。
對於簡單的生成警告訊息的情況這些已經足夠了。 warnings 模組對過濾和警告訊息處理提供了大量的更高階的配置選項。 更多資訊請參考 Python文件
以上就是Python如何輸出警告資訊的詳細內容,更多關於Python 輸出警告資訊的資料請關注我們其它相關文章!