print debugの効率化

目次

AtCoder Beginner ContestのPythonコードをデバッグするためにprint()を多用しているが、コードを提出する時にデバッグ用print()を削除するのが面倒。そこで、環境変数でデバッグ情報の出力を制御できるdebug()関数を作成して対応することにした。


問題点

AtCoder Beginner Contestに参加していますが、手早く変数の状態を確認するためにprint()デバッグを多用しています。しかし、コードを提出する前には、そのデバッグ用コードを1つずつ削除する手間がかかり面倒です。

解決方法

環境変数DEBUGを見てデバッグ情報を出力する・しないを制御する関数debug()を作成しました。

import os

def debug(*args):
    if os.environ.get("DEBUG") in ("1", "true", "True", "yes"):
        print(*args)

技術的工夫

しかし環境変数を手でセットしたり削除するのは面倒です。

そこで、実際にはプログラムが、テストデータを与えて結果が予想された値と同じか判定する評価プログラムから実行されるので、この評価プログラムのオプションで環境変数のセットしています。

env = os.environ.copy()
if args.debug:
    env['DEBUG'] = '1'

process = subprocess.Popen(["python3", prog_name],
                            stdin=subprocess.PIPE,
                            stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE,
                            text=True,
                            env=env)