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

VSCode调试中途暂停/新增断点致Python异常无法捕获

VSCode调试Python时动态暂停/新增断点导致异常捕获失效问题

复现示例代码

import contextlib, signal

@contextlib.contextmanager
def time_limit(seconds):
    def signal_handler(signum, frame):
        raise RuntimeError("Timed out!")

    signal.setitimer(signal.ITIMER_REAL, seconds)
    signal.signal(signal.SIGALRM, signal_handler)
    try:
        yield
    finally:
        signal.setitimer(signal.ITIMER_REAL, 0)
    

if __name__ == "__main__":
    print("start")
    try:
        with time_limit(10):
            a=1
            while True:
                a = -a
    except RuntimeError:
        print("timed out")
    print("finished")

不同调试场景的表现

  • 使用暂停功能:异常未被捕获:运行中途点击pause (F6),程序在a=-a行暂停,超时后抛出RuntimeError,但程序无法捕获该错误,控制台打印回溯信息但仍处于暂停状态,点击continue (F5)后程序会无限运行。
  • 使用预设断点:异常被捕获:提前在a=-a行设置断点,运行程序后在断点处停止,等待数秒后程序会捕获运行时错误并成功结束,不过程序收到异常后会自动继续运行,这一行为也存在异常。
  • 中途新增断点:异常未被捕获:程序运行一段时间后在a=-a行新增断点,会出现与使用暂停功能相同的情况。推测“暂停”功能可能是通过“中途新增断点”实现的,该问题可能与运行时添加断点有关。

补充实验观察

  • 使用Pause功能暂停后,切换到Debug Console,超时后会抛出以下信息:
    <class 'RuntimeError'> raised from within the callback set in sys.settrace.
    Debugging will be disabled for this thread (<_MainThread(MainThread, started 140324903388352)>).
    
  • 在PyCharm中也发现类似问题,但行为略有不同:VSCode点击continue(F5)后仍可再次暂停,而PyCharm点击后无法再暂停。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:05:00