1. 程式人生 > 程式設計 >Python如何輸出警告資訊

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 輸出警告資訊的資料請關注我們其它相關文章!