hbirthday 发表于 4 天前

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

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
到这儿来~

FishC 发表于 4 天前

这个例子展示了利用异常跳出多层循环的技巧,但实际编程中并不推荐这样使用。

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

等价于:

for i in range(10):
    if i > 3:
      break
    print(i)
print("到这儿来~")


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

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

例如,用函数实现:

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

result = find_value()


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

不二如是 发表于 4 天前

这个例子是为了演示“异常能跳出多层结构”,不是为了教你这么写代码滴{:13_394:}

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

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


为什么说它像goto

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


有什么作用

几乎没有实际工程价值。

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

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

正确做法

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

而不是用异常当控制流。


页: [1]
查看完整版本: Python中的利用异常实现goto的例子不理解