質問: visual studio で python のデバッグ時だけ実行されるコード書く方法ってないでしょうか? c++だとマクロを使えるんですが・・・ 環境 visualstudio 2019 python 3.6
回答: 今のところ、@shingo.nakanishi さん回答の方法が一番作業量や性能への影響が少ないものでしょう。 __debug__ > > この定数は、Python が -O オプションを有効にして開始されたのでなければ真です。 assert 文も参照して下さい。 > > > **注釈:** 名前 None 、 False 、 True 、 __debug__ は再代入できない (これらに対する代入は、たとえ属性名としてであっても SyntaxError が送出されます) ので、これらは「真の」定数であると考えられます。 > > > -O > > __debug__の値を条件とするassertステートメントとコードを削除します。 コンパイルされた(バイトコード)ファイルのファイル名を、.pyc拡張子の前に.opt-1を追加して拡張します(PEP 488を参照)。 PYTHONOPTIMIZEも参照してください。 > > > -OO > > -Oを実行し、docstringも破棄します。 コンパイルされた(バイトコード)ファイルのファイル名を.pyc拡張子の前に.opt-2を追加して拡張します(PEP 488を参照)。 > > > PYTHONOPTIMIZE > > この変数に空でない文字列を設定するのは -O オプションを指定するのと等価です。整数を設定した場合、 -O を複数回指定したのと同じになります。 > > > しかし、**最適化オプションを指定していない** ことと **デバッグモードである** ことは言葉の厳密な意味としては一致していない、いまいちシックリこないとも感じられます。 実行時にオプションを付け忘れるとデフォルトではデバッグモードで動作しているということにもなるので。 そこで Visual Studioということであれば、プロジェクトのプロパティでデバッグモード時の`Script Arguments`または`Envirinment Variables`欄に独自に定義したオプションや環境変数を指定することで、類似の効果を出せると考えられます。 C++のマクロも、こうしたプロジェクトのプロパティで定義設定を変えてコンパイルしている方法です。Pythonはバイトコードにコンパイルされるとは言え、大きくはインタプリタの分類なので、まったく同じには出来ませんが。 Python コードのデバッグ プロジェクトのデバッグ オプション > > 既定では、デバッガーは標準的な Python ランチャーを使用してプログラムを起動します。コマンドライン引数も、特別なパスや条件も使用しません。 スタートアップ オプションはプロジェクトのデバッグ プロパティで変更することができます。デバッグ プロパティにアクセスするには、ソリューション エクスプローラーでプロジェクトを右クリックし、 プロパティ] を選択して、 [デバッグ] タブを選択します。 > > > 上記ページからの図の引用 > > ![VisualStudioPythonDebug > > > 以下のいずれかで独自定義のオプションや環境変数を取得し、その有無や値に応じて処理を変えることが出来るでしょう。 プログラムでの`Script Arguments`の処理方法例 pythonでコマンドラインアプリケーション作る話 の最後の方 cli.py とか、 Pythonでコマンドラインアプリケーションを作るときの雛形 の argparseを使ったコマンドライン引数の取得 など。 プログラムでの`Envirinment Variables`の取得方法例 Pythonのos.getenvとos.environ.getの違い > > `os.getenv('ENV_VAL')` > > `os.environ.get('ENV_VAL')` > > `os.environ['ENV_VAL']` > > >