在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
Run Code Online (Sandbox Code Playgroud)
有没有办法在python中执行此操作?
编辑:我得到了答案,还有更多:) Paolo,Steven Rumbalski和J Sebastian给了我正在寻找的信息.感谢das的详细解答,虽然我现在可能不会使用预处理器.
J塞巴斯蒂安的评论被删除了,因为他发表评论的答案,我认为删除了他的答案.他说我可以在Logger中使用isEnabledFor()方法来提供条件.
感谢大家的投入.这是我的第一个问题.我希望我能接受保罗,或塞巴斯蒂安的答案.但由于那些是作为评论提供的,我会接受das的回答.
我可能会使用http://nestedinfiniteloops.wordpress.com/2012/01/15/if-debug-python-flavoured/或Logger.isEnabledFor()
小智 69
__debug__在您的代码中使用:
if __debug__:
print 'Debug ON'
else:
print 'Debug OFF'
Run Code Online (Sandbox Code Playgroud)
abc.py使用上面的代码创建一个脚本然后
python -O abc.pypython abc.py观察差异.
doc*_*red 15
穆罕默德的答案是正确的方法:使用if __debug__.
事实上,Python中完全消除if如果表达式是一个静态常数声明(如True,False,None,__debug__,0,和0.0),使if __debug__编译时指令,而不是一个运行时检查:
>>> def test():
... if __debug__:
... return 'debug'
... return 'not debug'
...
>>> import dis
>>> dis.dis(test)
3 0 LOAD_CONST 1 ('debug')
2 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
我无法找到文档中明确说明的位置,尽管它提到了断言语句的类似优化.
所以不要使用外部预处理器 - 为此目的,你有一个内置!
您正在寻找的是python 的预处理器.通常,您有三种选择:
我建议先尝试pppp;)
与设置DEBUG标志和运行代码相比,预处理器的主要优点if (DEBUG == True)是条件检查也会花费CPU周期,因此最好删除不需要运行的代码(如果python解释器不执行此操作),而不是跳过它.