デバッグ出力

print() でデバッグ出力するべきではない。あとで外すのが面倒で,間違えて必要な print() まで外す可能性もある。

そんなときは logging という仕組みを使う(Logging HOWTO も参照)。

次の例はコマンドラインオプション --debug を付けたときだけデバッグ出力する。

#! /usr/bin/env python3

import logging
import sys

if "--debug" in sys.argv:
    logging.basicConfig(level=logging.DEBUG)

print("ふつうのprint")
logging.debug("デバッグメッセージ")

デバッグメッセージの前には DEBUG:root: のような文字列が付く。これを日時にするには次のようにする:

logging.basicConfig(format='%(asctime)s:%(message)s',
                    level=logging.DEBUG)

ロギングのレベルは logging.DEBUG < logging.INFO < logging.WARNING < logging.ERROR < logging.CRITICAL の5段階があり,これらに対応して logging.debug() < logging.info() < logging.warning() < logging.error() < logging.critical() がある。デフォルトのレベルは logging.WARNING で,そのレベル以上のものが出力される。

サードパーティのライブラリを呼び出すと,その中で大量のデバッグメッセージが出力されることがある。そういうときは,その直前で例えば logging.disable(logging.INFO) とすると,それ以降は logging.INFO 以下のメッセージを出力しない。logging.disable(logging.NOTSET) で当初の logging.basicConfig() で設定したレベルに戻る。


Last modified: