標籤:沒有 例子 異常 wrap argument www. ted 模組 imp
14.11 輸出警告資訊?問題?
你希望自己的程式能產生警告資訊(比如廢棄特性或使用問題)。
解決方案?
要輸出一個警告訊息,可使用 warning.warn()
函數。例如:
import warningsdef 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.pyexample.py:5: DeprecationWarning: logfile argument is deprecated warnings.warn(‘logfile argument is deprecated‘, DeprecationWarning)
通常來講,警告會輸出到標準錯誤上。如果你想講警告轉換為異常,可以使用 -W error
選項:
bash % python3 -W error example.pyTraceback (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 deprecatedbash %
討論?
在你維護軟體,提示使用者某些資訊,但是又不需要將其上升為異常層級,那麼輸出警告資訊就會很有用了。
例如,假設你準備修改某個函數庫或架構的功能,你可以先為你要更改的部分輸出警告資訊,同時向後相容一段時間。
你還可以警告使用者一些對代碼有問題的使用方式。
作為另外一個內建函數庫的警告使用例子,下面示範了一個沒有關閉檔案就銷毀它時產生的警告訊息:
>>> 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文檔
艾伯特(http://www.aibbt.com/)國內第一家人工智慧門戶
Python Cookbook(第3版)中文版:14.11 輸出警告資訊