简洁版本
我有一段正在调试的代码,它检查它的值__debug__
并在它为 True 时执行一些代码。
if __debug__:
<stuff happens>
问题是“东西”永远不会发生,即使__debug__
看起来是真的。
长版/详情
为了检查这一点,我正在__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 行)是我能想到的检查是否__debug__
“真实”的所有方式,所有 3 条都暗示那__debug__
是真实的。同样,转换__debug__
为布尔值然后评估if
(第 88 行)也可以按预期工作。第 90 行是一个愚蠢的完整性检查。
__debug__
在可能导致这种情况的工作方式中,我有什么遗漏吗?
注意:我在处理模块中的_ldap_function_call
函数时遇到的错误时发现了这一点。python-ldap
我只在使用 IIS 时收到此错误 - 在 Django 的开发服务器上一切正常。