御险篇-Day45 捕获指定类型异常

0 次阅读 2026-10-19 10:22

📖 知识点

指定异常捕获语法

try:
    # 风险代码
except 异常类型:
    # 只捕获这一类异常,其他异常不会被拦截

原理:

  • 只有当try中抛出的异常和写的异常类型匹配,才会进入 except

  • 如果抛出别的类型异常,不会被捕获,程序依旧崩溃

回顾三大异常:

  • ValueError 值错误,类型转换失败

  • IndexError 列表索引越界

  • KeyError 字典找不到 key

示例:只捕获 ValueError

try:
    num = int("abc")
except ValueError:
    print("捕获:数值转换失败(ValueError)")

如果发生别的错误,不会捕获:

try:
    lst = [1,2,3]
    print(lst[10])
except ValueError:
    print("捕获数值转换错误")

这段代码触发 IndexError,不是 ValueError,不会进入 except,程序直接报错终止。

⚔️ Kata 实战任务

任务需求:

  1. 使用try ... except 异常类型编写代码

  2. 字典 student = {"name":"小明", "score":90}

  3. try 块中尝试读取 student["age"]

  4. except 只捕获KeyError,捕获后打印:捕获异常:找不到这个键!

  5. 最后打印:代码执行完毕

参考代码

student = {"name":"小明", "score":90}
try:
    print(student["age"])
except KeyError:
    print("捕获异常:找不到这个键!")

print("代码执行完毕")

运行输出:

捕获异常:找不到这个键!
代码执行完毕

🧠 思考题

  1. 上面代码如果把student["age"]改成int("hello"),会进入 except 分支吗?为什么?

  2. 对比:except: 和 except KeyError: 两种写法,各自优缺点是什么?