ドキュメントに示されている例に基づいたコードスニペットを使用して、DeprecationWarning
を上げようとしています。 http://docs.python.org/2/library/warnings.html#warnings.warn
公式
def deprecation(message):
warnings.warn(message, DeprecationWarning, stacklevel=2)
私の
import warnings
warnings.warn("This is a warnings.", DeprecationWarning, stacklevel=2) is None # returns True
Stacklevel引数を削除して、負の0、2、および20000に設定しようとしました。警告は、常にサイレントに飲み込まれます。警告を発行したり、例外を発生させたりすることはありません。行を無視してNone
を返します。ドキュメントには、無視するための基準については記載されていません。メッセージを送信し、warnings.warnを正しく発行しますUserwarning.
これを引き起こしている可能性があるのは何ですか?実際に警告するように警告するにはどうすればよいですか?
ドキュメントから:
デフォルトでは、Pythonはいくつかの警告フィルターをインストールします。これらは、-Wに渡されるコマンドラインオプションとfilterwarnings()の呼び出しによってオーバーライドできます。
- DeprecationWarningとPendingDeprecationWarning、およびImportWarningは無視されます。
- -bオプションが1回または2回指定されない限り、BytesWarningは無視されます。この場合、この警告は出力されるか(-b)、例外になります(-bb)。
デフォルトでは、DeprecationWarning
は無視されます。以下を使用してフィルターを変更できます。
warnings.simplefilter('always', DeprecationWarning)
これで、警告が出力されます。
>>> import warnings
>>> warnings.simplefilter('always', DeprecationWarning)
>>> warnings.warn('test', DeprecationWarning)
/home/guest/.env/bin/ipython:1: DeprecationWarning: test
#!/home/guest/.env/bin/python
警告モジュールは、特定の条件に基づいて警告のフィルタリングを実装します。 warnings.filters
を出力すると、デフォルトのフィルターを表示できます。
$ python -c "import warnings; print(warnings.filters)"
[('ignore', None, <type 'exceptions.DeprecationWarning'>, None, 0),
('ignore', None, <type 'exceptions.PendingDeprecationWarning'>, None, 0),
('ignore', None, <type 'exceptions.ImportWarning'>, None, 0),
('ignore', None, <type 'exceptions.BytesWarning'>, None, 0)]
ご覧のとおり、DeprecationWarning
はデフォルトで無視されます。 warnings
モジュールおよび -W
コマンドラインオプション からPythonフィルタを設定するには-詳細については、ドキュメントを参照してください。
例:
$ python -Wall
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import warnings
>>> warnings.warn("test", DeprecationWarning)
__main__:1: DeprecationWarning: test