python模块中用于调试的本地标志

python模块中用于调试的本地标志,python,debugging,optimization,Python,Debugging,Optimization,我希望在项目的每个模块中定义一个本地调试标志,并将其与调试变量结合使用,以便能够进行部分调试。例如,如果我想调试模块mod1,我将定义 mod1_dflag=真 然后在我想使用的每个调试部分中: if __debug__: if mod1_dflag: debug code block 如果我这样做,Python优化器是否会完全使用外部If语句? 更准确地说,在我使用-O标志运行脚本之后,这段代码将变成什么 解决方案由Oliver Bestwalter提出,可在以下网址

我希望在项目的每个模块中定义一个本地调试标志,并将其与调试变量结合使用,以便能够进行部分调试。例如,如果我想调试模块mod1,我将定义

mod1_dflag=真

然后在我想使用的每个调试部分中:

if __debug__:
    if mod1_dflag:
        debug code block
如果我这样做,Python优化器是否会完全使用外部If语句? 更准确地说,在我使用-O标志运行脚本之后,这段代码将变成什么

解决方案由Oliver Bestwalter提出,可在以下网址找到: \u调试\u默认为True。只有当python以优化模式运行时,才会将其设置为False,而人们通常不会这样做

优化命令行参数:

-O     : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x
-OO    : remove doc-strings in addition to the -O optimizations
最好使用环境变量。例如:

DEBUG = os.getenv('DEBUG')

if DEBUG:
    do debug stuff

然后,在运行应用程序之前,您可以在shell中导出DEBUG=y或在windows上设置DEBUG=y以启用调试模式。

为什么不在测试设置过程中完全动态地设置或取消设置某些模块的.\uuuuuuu DEBUG\uuuuuuu标记,例如从配置文件中读取模块列表?然后你就可以不用管生产代码了。我不知道每个模块都有自己的内置调试标志。这不是我的重点:为了你的目的,你甚至不需要使用内置标志。我想说的主要一点是,您可以在测试设置中为每个模块动态地执行此操作,而无需将其添加到生产代码中。有人可以说优化后是否会使用此代码?您可以自己尝试此操作。。。而且已经在互联网络中: