如何模仿C';s#定义可以选择在Python中打印调试输出的功能?
我有一个巨大的python代码,其中有许多用于调试的打印语句。我希望能够一次启用或禁用它们,而无需仔细研究成百上千的如何模仿C';s#定义可以选择在Python中打印调试输出的功能?,python,c,debugging,preprocessor-directive,Python,C,Debugging,Preprocessor Directive,我有一个巨大的python代码,其中有许多用于调试的打印语句。我希望能够一次启用或禁用它们,而无需仔细研究成百上千的printf,每次都对它们进行注释 在C语言中,可以使用#define注释掉代码中不需要的部分,如下面的#ifdef- #define debug #ifdef debug printf("Debug on") #endif 如果我不想处于调试模式,我可以简单地注释#define debug,我的print语句都不会编译 如何在Python中实现这一功能?Python与C
printf
,每次都对它们进行注释
在C语言中,可以使用#define
注释掉代码中不需要的部分,如下面的#ifdef
-
#define debug
#ifdef debug
printf("Debug on")
#endif
如果我不想处于调试模式,我可以简单地注释#define debug,我的print
语句都不会编译
如何在Python中实现这一功能?Python与C的宏没有直接的等价物,因为它没有预处理器,也不像C那样区分编译时和运行时 但是,一个简单的解决方案是将
打印
行放入if语句中:
if False:
print(...)
print(...)
print(...)
...
然后,只需将False
更改为True
,即可执行它们
同样,您可以:
DEBUG = False
if DEBUG:
print(...)
print(...)
print(...)
...
然后将DEBUG
名称更改为True
第三个(可能是最好的)选项是使用Python的内置:
\uuuu调试\uuuu
是一个类似于None
的常量,如果启动Python时没有-O
选项(它处于调试模式),则设置为True
。否则,如果设置了-O
选项(我们处于优化/生产模式),\uuu调试\uuu
将设置为False
,并且解释器将完全忽略使用它的代码,这样就不会造成性能损失。您应该查看Python日志库:
使用python标准库模块。这是一个例子 您可以像这样设置给定代码运行的调试级别(有关更多信息,请参阅): 因此,如果您选择这样做,您甚至可以在命令行上通过调试级别,比如执行以下操作
--loggingLevel=DEBUG
由于C宏是在编译时计算的,以简化运行时,而且Python没有这种分离,因此这种功能在Python中没有多大意义。您只需使用正常的运行时检查来进行分支(读:简单的ifs)。同样相关的:使用
if\uuuu调试\uuuu
。此标志由-O
选项设置,在生产(优化)模式下运行时,它实际上会删除代码,因此没有性能损失。谢谢,我忘记了\uuuu调试\uu
。
import logging
# if you want you can also set filename="logfile.txt" to write to file
logging.basicConfig(level=logging.DEBUG) # there are other options like logging.INFO
x = 42.31415
# Run your program here....
logging.debug("x is now" + str(x))
--loggingLevel=DEBUG