# 20 `warnings` -- 警告の制御

バージョン 2.1 で 新たに追加 された仕様です。

警告メッセージは一般に、ユーザに警告しておいた方がよいような状況下に プログラムが置かれているが、その状況は (通常は) 例外を送出したり そのプログラムを終了させるほどの正当な理由がないといった状況で 発されます。例えば、プログラムが古いモジュールを使っている場合 には警告を発したくなるかもしれません。

Python プログラマは、このモジュールの `warn()` 関数を 使うことで警告を発することができます。(C 言語のプログラマは `PyErr_Warn()` を使います; 詳細は Python/C API Reference Manual を参照してください)。

警告メッセージは通常 `sys.stderr` に出力されますが、その処理 方法は、全ての警告に対する無視する処理から警告を例外に変更する 処理まで、柔軟に変更することができます。警告の処理方法は 警告カテゴリ (以下参照)、警告メッセージテキスト、そして警告を 発したソースコード上の場所に基づいて変更することができます。 ソースコード上の同じ場所に対して特定の警告が繰り返された場合、 通常は抑制されます。

警告制御には 2 つの段階 (stage) があります: 第一に、警告が発される たびに、メッセージを出力すべきかどうか決定が行われます; 次に、 メッセージを出力するなら、メッセージはユーザによって設定が可能なフック を使って書式化され印字されます。

警告メッセージを出力するかどうかの決定は、警告フィルタによって制御 されます。警告フィルタは一致規則 (matching rule)と動作からなるシーケンスです。 `filterwarnings()` を呼び出して一致規則をフィルタに追加する ことができ、`resetwarnings()` を呼び出してフィルタを標準 設定の状態にリセットすることができます。

警告メッセージの印字は `showwarning()` を呼び出して行うことが でき、この関数は上書きすることができます; この関数の標準の実装では、 `formatwarning()` を呼び出して警告メッセージを書式化しますが、 この関数についても自作の実装を使うことができます。