概要
忘れないうちにメモメモ。
Python 3.7 から、Python Development Mode
というのが追加されていたんですね。知らなかったです。
元々、-W default
というオプションがあって、それを指定すると通常時だと無視扱いになる警告などが表示されていました。
3.7から追加された Python Development Mode
は、-W default
もオンにしつつ、他にもいろいろ警告を表示してくれるものですね。
(いろんなデバッグ用フラグのセットみたいな感じ)
asyncio のデバッグモードもオンにしてくれるのはありがたいですね。
サンプル
以下のようなちょっとお行儀が悪いプログラムを用意。
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__)
ちゃんとトレースバックも出ますね。
参考情報
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場