鱼C论坛

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

Python中的利用异常实现goto的例子不理解

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

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

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

x
Python中的利用异常实现goto的例子不理解,不知道这个例子有什么作用。
>>> try:
...     while True:
...         while True:
...             for i in range(10):
...                 if i > 3:
...                     raise
...                 print(i)
...             print("被跳过~")
...         print("被跳过~")
...     print("被跳过~")
... except:
...     print("到这儿来~")
...
0
1
2
3
到这儿来~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 7 小时前 | 显示全部楼层
这个例子展示了利用异常跳出多层循环的技巧,但实际编程中并不推荐这样使用。

代码执行过程:
1. 程序进入三层嵌套循环
2. 当 i > 3 时,执行 raise 语句引发异常
3. 异常会立即跳出所有嵌套循环,直接跳转到 except
4. 因此 print("被跳过~") 这些语句都不会执行

等价于:

  1. for i in range(10):
  2.     if i > 3:
  3.         break
  4.     print(i)
  5. print("到这儿来~")
复制代码


为什么不推荐使用?
1. 异常机制本应用于错误处理,而不是流程控制
2. 代码可读性差,难以理解和维护
3. 性能比正常的循环控制语句差

正确的做法:
1. 使用 break 跳出当前循环
2. 使用函数和 return 跳出多层循环
3. 设置标志变量控制循环

例如,用函数实现:

  1. def find_value():
  2.     for i in range(5):
  3.         for j in range(5):
  4.             if i * j > 10:
  5.                 return i, j  # 直接跳出所有循环
  6.     return None

  7. result = find_value()
复制代码


总之,这个例子只是一个技巧演示,实际编程中应该使用更清晰、可维护的方法来控制程序流程。

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

使用道具 举报

发表于 5 小时前 | 显示全部楼层
这个例子是为了演示“异常能跳出多层结构”,不是为了教你这么写代码滴

这段代码是在告诉我们 raise 抛出异常后,Python会立刻中断当前执行路径,直接跳出所有嵌套的for和while循环,直到命中最近的except。

因此只打印0~3,随后直接执行except中的代码。


为什么说它像goto

因为一次raise可以跳出多层嵌套,这种“直接跳到外部某个位置继续执行”的行为,在效果上类似goto。


有什么作用

几乎没有实际工程价值

这是一个反例,用来说明异常机制的“穿透性”,而不是推荐写法。

异常本应表示错误,不应用来控制正常流程。

正确做法

需要跳出多层循环时,优先用:函数 + return

而不是用异常当控制流。


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 19:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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