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

如何让debugpy仅在触发异常时暂停执行并等待客户端连接?

解决debugpy仅在异常时等待客户端连接的问题

直接用命令行的--wait-for-client参数会让程序启动就暂停,不符合你的需求。正确的做法是在代码中手动集成debugpy,自定义异常触发逻辑:

具体实现步骤

  • 在业务代码开头导入debugpy和sys,初始化监听但不立即等待客户端
  • 自定义异常处理函数,在异常发生时触发debugpy等待连接并启动调试

示例代码(example.py)

import debugpy
import sys

# 启动debugpy监听指定地址和端口,不立即等待客户端
debugpy.listen(("0.0.0.0", 2345))

def debug_on_exception(exc_type, exc_value, exc_traceback):
    # 异常发生时,打印提示并等待调试客户端连接
    print(f"触发异常: {exc_type.__name__}: {exc_value},等待调试客户端接入...")
    debugpy.wait_for_client()
    # 触发断点,让调试器捕获异常栈
    debugpy.breakpoint()
    # 保留默认异常处理逻辑(可选)
    sys.__excepthook__(exc_type, exc_value, exc_traceback)

# 替换默认的异常处理函数
sys.excepthook = debug_on_exception

# 你的业务逻辑代码
if __name__ == "__main__":
    print("程序正常运行中...")
    # 测试用:取消注释下面一行可触发异常
    # 1 / 0
    print("程序无异常执行完成")

使用方式

直接运行你的脚本,不需要加debugpy的命令行参数:

python3 example.py
  • 程序正常运行时会一直执行,不会暂停
  • 当触发异常时,程序会阻塞并等待调试客户端连接,此时用VSCode或其他支持debugpy的调试工具连接到0.0.0.0:2345,即可进入调试状态查看异常详情

为什么之前的方法无效?

  • 命令行的--wait-for-client是全局配置,会强制程序启动阶段就暂停等待连接,无法区分是否有异常
  • 单纯修改excepthook但没正确调用debugpy的wait_for_client()和breakpoint()方法,所以无法触发调试等待逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:27:03