いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Pythonメモ-117 (Python Development Modeを有効にする)

概要

忘れないうちにメモメモ。

Python 3.7 から、Python Development Mode というのが追加されていたんですね。知らなかったです。

元々、-W default というオプションがあって、それを指定すると通常時だと無視扱いになる警告などが表示されていました。

3.7から追加された Python Development Mode は、-W default もオンにしつつ、他にもいろいろ警告を表示してくれるものですね。

(いろんなデバッグ用フラグのセットみたいな感じ)

docs.python.org

asyncio のデバッグモードもオンにしてくれるのはありがたいですね。

docs.python.org

サンプル

以下のようなちょっとお行儀が悪いプログラムを用意。

import sys

def main():
    fp = open(__file__)
    print(fp.readline())
    # fp を わざと閉じずに終了


if __name__ == '__main__':
    main()

Pythonのバージョンは以下。

gitpod /workspace/gitpod-playground $ python -V
Python 3.8.7

普通に実行

gitpod /workspace/gitpod-playground $ python pydevmode.py 
import sys

警告は表示されずに実行されました。

では、次は Python Development Mode を有効にして実行。

gitpod /workspace/gitpod-playground $ python -X dev pydevmode.py 
import sys

pydevmode.py:10: ResourceWarning: unclosed file <_io.TextIOWrapper name='pydevmode.py' mode='r' encoding='UTF-8'>
  main()
ResourceWarning: Enable tracemalloc to get the object allocation traceback

ちゃんと「閉じてないよ」って警告がでてますね。下の行に「tracemalloc 有効にしたらオブジェクトの割当のトレースバックが取れるよ」って言ってくれているので、有効にしてみます。

gitpod /workspace/gitpod-playground $ python -X dev -X tracemalloc=10 pydevmode.py 
import sys

pydevmode.py:10: ResourceWarning: unclosed file <_io.TextIOWrapper name='pydevmode.py' mode='r' encoding='UTF-8'>
  main()
Object allocated at (most recent call last):
  File "pydevmode.py", lineno 10
    main()
  File "pydevmode.py", lineno 4
    fp = open(__file__)

ちゃんとトレースバックも出ますね。

参考情報

docs.python.org

docs.python.org

docs.python.org

docs.python.org


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com