157
132

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python 開発者は -W default オプションを使おう

Last updated at Posted at 2018-05-24

Python はデフォルトで多くの警告を表示しません。これはPython開発者ではないエンドユーザーが警告を見た時に混乱するのを防ぐためです。

デフォルトで ignore される Warning は次のとおりです。 (ref: https://docs.python.org/3/library/warnings.html#default-warning-filters)

  • DeprecationWarning
  • PendingDeprecationWarning
  • ImportWarning
  • BytesWarning
  • ResourceWarning

これらの warning を Python 開発者が表示しないと、せっかく使っているライブラリが長期間 Deprecation 期間を設けていてもその Warning に気づかないとかいう事が起きます。

また、 warning システムは同じ場所から発生した同じ warning を複数回表示しないとかいったフィルタリングができるようになっている関係で、通常のログなどにくらべて遅かったり、メモリを消費したりします。

例えば botocore が head_object でメモリリークするという報告を調べていたら、 socket を close していないという ResourceWarning が原因でした。

こういった問題は開発者が普段から Python の -W default (短縮形は -Wd) オプションを利用していれば防げたはずです。

このオプションは環境変数でも指定できるので、開発マシンの .bashrcexport PYTHONWARNINGS=default と書いてしまうのも良いと思います。自分が開発しているのではないアプリやライブラリの Warning も、できれば報告してあげてください。

なお、 Python 3.7 からは -X dev オプションや PYTHONDEVMODE=1 環境変数で、より性能を犠牲にしてエラー検出を強化した開発者モードを利用することができます。開発者モードでは上記の warning もデフォルトで表示されます。

157
132
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
157
132

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?