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

求VS Code调试器中未捕获异常与用户未捕获异常的Python代码示例

VS Code Python调试器:「未捕获异常」与「用户未捕获异常」的差异

核心定义

  • 未捕获异常:覆盖所有未被try/except捕获的异常——不管异常是你自己写的代码抛出的,还是标准库、第三方库内部抛出的,调试器都会在异常抛出位置中断。
  • 用户未捕获异常:仅针对你自己编写的代码中抛出且未被捕获的异常。如果异常是标准库/第三方库内部抛出的,哪怕你没在代码里处理,调试器也不会中断。

注意:要让这个差异生效,确保VS Code调试配置(launch.json)中的justMyCode设置为true(默认值就是true,若被修改过需改回)。

可复现差异的代码示例

示例1:用户代码抛出未捕获异常

def user_defined_func():
    # 这是用户自己写的代码抛出异常
    raise ValueError("用户代码触发的未捕获异常")

user_defined_func()
  • 勾选「未捕获异常」:调试器会在raise语句处中断。
  • 勾选「用户未捕获异常」:调试器同样会在raise语句处中断(符合“用户代码抛出的未捕获异常”条件)。

示例2:标准库内部抛出未捕获异常

import json

# 调用标准库json的loads函数,传入无效格式的字符串,触发库内部的异常
json.loads("{invalid-json}")
  • 勾选「未捕获异常」:调试器会在json模块内部抛出异常的位置中断(即使justMyCode为true,也会显示“外部代码”的中断提示)。
  • 勾选「用户未捕获异常」:调试器不会中断,程序直接因异常崩溃(因为异常是标准库内部抛出的,不属于用户代码的未捕获异常范畴)。

为什么你之前的测试没看到差异?

如果你用math.sqrt(-1)这类例子没看到差异,大概率是因为:
当你调用math.sqrt(-1)时,异常虽然是math库抛出的,但调试器的justMyCode若设为false,会加载库代码的栈帧,此时「用户未捕获异常」的判定会包含调用链路中的用户代码帧,导致调试器中断。只要把justMyCode设为true,就能看到上述示例中的差异。

内容的提问来源于stack exchange,提问作者mg-arm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:12:04