短縮版
__debug__
値をチェックし、 True の場合はコードを実行する、デバッグ中のコードのセクションがあります。
if __debug__:
<stuff happens>
__debug__
問題は、 True のように見えても、「何か」が決して起こらないことです。
ロングバージョン・詳細
これを確認するために、次のパターンを使用して、関数の実行時にいくつかの変数の値 (特に__debug__
) をファイルに出力しています。(このモジュールで既に定義されているos.open
ため、使用しています。)open
try:
myfile = os.open("test.txt", os.O_RDWR|os.O_CREAT|os.O_APPEND)
# work + some print statements to check the value of __DEBUG__
finally:
os.close(myfile)
私が最も混乱しているコードは次のようになります。
os.write(myfile, "LINE %s | LDAP FUNCTION __DEBUG__: %s \n" %(sys._getframe(0).f_lineno, __debug__))
os.write(myfile, "LINE %s | LDAP FUNCTION __DEBUG__: %s \n" %(sys._getframe(0).f_lineno, type(__debug__)))
os.write(myfile, "LINE %s | LDAP FUNCTION __DEBUG__: %s \n" %(sys._getframe(0).f_lineno, bool(__debug__)))
if __debug__:
os.write(myfile, "LINE %s | LDAP FUNCTION __DEBUG__: %s \n" %(sys._getframe(0).f_lineno, __debug__))
if bool(__debug__):
os.write(myfile, "LINE %s | LDAP FUNCTION __DEBUG__: %s \n" %(sys._getframe(0).f_lineno, __debug__))
if True:
os.write(myfile, "LINE %s | LDAP FUNCTION __DEBUG__: %s \n" %(sys._getframe(0).f_lineno, __debug__))
if __debug__:
os.write(myfile, "LINE %s | LDAP FUNCTION __DEBUG__: %s \n" %(sys._getframe(0).f_lineno, __debug__))
出力ファイルは次のようになります。
LINE 82 | LDAP FUNCTION __DEBUG__: True
LINE 83 | LDAP FUNCTION __DEBUG__: <type 'bool'>
LINE 84 | LDAP FUNCTION __DEBUG__: True
LINE 88 | LDAP FUNCTION __DEBUG__: True
LINE 90 | LDAP FUNCTION __DEBUG__: True
最初の 3 つのステートメント (82 ~ 84 行目) は、「真実」かどうかを確認するために考えられるすべての方法であり、3 つすべてがそれが真__debug__
であることを暗示しています。__debug__
同様に、ブール値としてキャスト__debug__
してから評価するif
(88 行目) も期待どおりに機能します。行 90 はばかげた健全性チェックです。
__debug__
これを引き起こしている可能性のある方法で欠けているものはありますか?
注:モジュール内の_ldap_function_call
関数でエラーが発生しているときに、これを見つけました。python-ldap
IIS を使用している場合にのみこのエラーが発生します。Django の開発サーバーではすべて正常に動作します。