55

Cでは次のようなコードを書きます

#ifdef DEBUG
printf("Some debug log... This could probably be achieved by python logging.Logger");
/* Do some sanity check code */
assert someCondition
/* More complex sanitycheck */
while(list->next){
assert fooCheck(list)
}

#endif

Pythonでこれを行う方法はありますか?

編集: 私は答えを得ました :) Paolo、Steven Rumbalski、および J Sebastian は、私が探していた情報を提供してくれました。詳細な回答をありがとうございますが、現在はおそらくプリプロセッサを使用していません。

J Sebastian は、コメントを投稿した回答が削除されたため、コメントが削除されたと思います。彼は、Logger の isEnabledFor() メソッドを使用して条件をフィードできると言いました。

ご意見をお寄せいただきありがとうございます。これは私の最初の質問です。パオロ、またはセバスチャンの答えを受け入れることができればいいのにと思います。しかし、それらはコメントとして提供されたので、dasの回答を受け入れます。

おそらくhttp://nestedinfiniteloops.wordpress.com/2012/01/15/if-debug-python-flavored/または Logger.isEnabledFor()のいずれかを使用します

4

4 に答える 4

109

コードで使用__debug__します。

if __debug__:
    print 'Debug ON'
else:
    print 'Debug OFF'

abc.py上記のコードでスクリプトを作成し、

  1. で実行python -O abc.py
  2. で実行python abc.py

違いを観察してください。

于 2014-12-13T04:05:52.203 に答える
11

あなたが探しているのは、pythonのプリプロセッサです。通常、次の 3 つのオプションがあります。

  1. 結果をインタープリターに渡す前に、特定のテンプレートに基づいてソースコードの一部を置き換える自作のスクリプト/プログラムを作成します (難しい場合があります)。
  2. pppp のような特別な目的の Python プリプロセッサを使用する- Poor's Python Pre-Processor
  3. GPPなどの汎用プリプロセッサを使用する

最初に pppp を試すことをお勧めします ;)

DEBUGフラグを設定してコードを実行する場合と比較した場合のプリプロセッサの主な利点はif (DEBUG == True)、条件チェックも CPU サイクルを消費することです。そのため、実行する必要のないコードを削除することをお勧めします (Python インタープリターがそれを行わない場合)。スキップする代わりに。

于 2012-11-12T22:45:38.820 に答える
2

Python でアサーションを探している場合assertは、実際に有効な python ステートメントです。 http://docs.python.org/2/reference/simple_stmts.html#assert

于 2012-11-12T22:40:02.077 に答える