鱼C论坛

 找回密码
 立即注册
查看: 22|回复: 2

try...except嵌套的问题

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大神,小甲鱼老师的课后例题有以下这道try...except的题:

import time
   
try:
    for i in reversed(range(1, 4)):
        print(i)
        time.sleep(1)
    try:
        520 + "FishC"
    except:
        print("内部异常~")
except:
    print("外部异常~")

我的困惑是当内部try...except中捕捉到了异常并执行except语句内容,为什么外部try...except语句不认定内部异常?也就是说不执行外部except语句中的内容?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层
各位大神,小甲鱼老师的课后例题有以下这道try...except的题:

  1. import time
  2.    
  3. try:
  4.     for i in reversed(range(1, 4)):
  5.         print(i)
  6.         time.sleep(1)
  7.     try:
  8.         520 + "FishC"
  9.     except:
  10.         print("内部异常~")
  11. except:
  12.     print("外部异常~")
复制代码


我的困惑是当内部try...except中捕捉到了异常并执行except语句内容,为什么外部try...except语句不认定内部异常?也就是说不执行外部except语句中的内容?


你的困惑在于不理解异常在嵌套 try...except 中的传播方式。简单来说,当内部 except 成功捕获并处理了异常后,该异常就被“消化”了,不会继续向外层传播。因此,外部 try 块认为没有未处理的异常,所以外部 except 不会执行。

具体分析代码执行流程:
1. 外部 try 块开始执行。
2. for 循环正常执行,打印 3、2、1,每次暂停1秒。
3. 循环结束后,执行内部 try 块。
4. 内部 try 块中的代码 520 + "FishC" 会引发 TypeError(整数和字符串不能相加)。
5. 内部 except 立即捕获这个异常,并打印“内部异常~”。
6. 异常被内部处理完毕后,程序继续执行外部 try 块的剩余部分。由于内部没有重新引发异常,外部 try 块正常结束。
7. 因此,外部 except 没有机会执行。

关键点:在 Python 中,异常一旦被某个 except 捕获并处理,除非显式地使用 raise 重新引发,否则异常链就会终止。你的代码中内部 except 没有使用 raise,所以外部感知不到异常。

如果你想同时触发外部异常,可以在内部 except 中重新引发异常,例如:
  1. import time
  2.    
  3. try:
  4.     for i in reversed(range(1, 4)):
  5.         print(i)
  6.         time.sleep(1)
  7.     try:
  8.         520 + "FishC"
  9.     except:
  10.         print("内部异常~")
  11.         raise  # 重新引发当前异常,让外层捕获
  12. except:
  13.     print("外部异常~")
复制代码

这样就会先打印“内部异常~”,再打印“外部异常~”。

希望这个解释能帮你理解!如果还有其他问题,请随时提出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层
因为你说的“内部异常”其实是“内部的内部的异常”,该异常已被内部 try-except 解决。所以【内部】会被判定为没有异常。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-8 17:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表