##
3.20.2 警告フィルタ

警告フィルタは、ある警告を無視すべきか、表示すべきか、あるいは (例外を送出する) エラーにするべきかを制御します。

概念的には、警告フィルタは複数のフィルタ仕様からなる順番付けられた リストを維持しています; 何らかの特定の警告が生じると、フィルタ仕様の 一致するものが見つかるまで、リスト中の各フィルタとの照合が行われます; 一致したフィルタ仕様がその警告の処理方法を決定します。 フィルタの各エントリは (action, message, category, module, lineno) からなるタプルです。ここで:

- action は以下の文字列のうちの一つです:

  値 | 処理方法
  --- | ---

  `"error"` | 一致した警告を例外に変えます

  `"ignore"` | 一致した警告を決して出力しません

  `"always"` | 一致した警告を常に出力します

  `"default"` | 一致した警告のうち、警告の原因になった ソースコード上の場所ごとに、最初の警告のみ出力します。

  `"module"` | 一致した警告のうち、警告の原因になった モジュールごとに、最初の警告のみ出力します。

  `"once"` | 一致した警告のうち、警告の原因になった 場所にかかわらず最初の警告のみ出力します。

- message は正規表現を含む文字列で、メッセージはこの パタンに一致しなければなりません (照合時には常に大小文字の区別を しないようにコンパイルされます)。

- category はクラス (`Warning` のサブクラス) です。 警告クラスはこのクラスのサブクラスに一致しなければなりません。

- module は正規表現を含む文字列で、モジュール名はこのパタン に一致しなければなりません (照合時には常に大小文字の区別を しないようにコンパイルされます)。

- lineno 整数で、警告が発生した場所の行番号に一致しなければ なりません、すべての行に一致する場合には `0` になります。

`Warning` クラスは組み込みの `Exception` クラスから 導出されているので、警告をエラーに変えるには単に `category(message)` を `raise` します。

警告フィルタは Python インタプリタのコマンドラインに渡される -W オプションで初期化されます。インタプリタは -W オプションに渡される全ての引数を `sys.warnoptions`; に変換せずに保存します; `warnings` モジュールは最初に `import` された際にこれらの引数を解釈します (無効なオプションは`sys.stderr` にメッセージを出力した後 無視されます)。