You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyCharm中__debug__在运行与调试模式下的异常行为问题

问题原因

__debug__是Python的编译期常量,默认值为True,只有在用python -O或python -OO参数启动解释器时才会被设为False。PyCharm的"调试模式"并不会触发这个常量的变更,所以无论你是正常运行还是调试,__debug__始终为True。

解决方案

如果你想实现"仅PyCharm调试模式执行、生产环境绝不运行"的需求,推荐以下几种方式:

方法1:利用PyCharm自定义环境变量

在PyCharm的调试配置中添加专属环境变量(比如DEBUG_MODE=1),代码里通过读取这个变量控制调试逻辑:

import os

def main():
    # 仅当环境变量DEBUG_MODE存在且为指定值时执行调试代码
    if os.getenv("DEBUG_MODE") == "1":
        print("debug mode")
    else:
        print("non debug")

if __name__ == '__main__':
    main()
  • 配置步骤:PyCharm右上角「运行/调试配置」→ 选中你的脚本 → 「环境变量」栏添加DEBUG_MODE=1
  • 生产环境不设置该变量,调试代码就不会执行,完全满足性能要求。

方法2:检测调试器是否活跃

利用sys.gettrace()判断是否有调试器附加(PyCharm启动调试时会自动设置跟踪函数):

import sys

def main():
    # 仅调试器运行时执行调试代码
    if sys.gettrace() is not None:
        print("debug mode")
    else:
        print("non debug")

if __name__ == '__main__':
    main()
  • 优点:无需手动配置环境变量,PyCharm调试时自动生效
  • 注意:生产环境若有其他调试工具附加可能误触发,但这种场景极少出现。

方法3:用优化模式部署生产代码(保留__debug__逻辑)

如果坚持用__debug__,生产环境部署时必须用python -O your_script.py运行,此时__debug__会被设为False,且调试代码块会被Python解释器直接从字节码中移除,完全不会执行。

关键提醒
  • __debug__和PyCharm的"调试模式"是完全独立的概念,不要混淆。
  • 对于计算成本高的调试代码,优先选方法1或2,能更精准控制执行时机,避免生产环境意外触发。

内容的提问来源于stack exchange,提问作者safex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:05:33