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
相关产品推荐
相关产品推荐

