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

生成器循环中断时抛出异常的原因及代码异常现象解析

生成器迭代中断时的异常分析

代码执行流程与输出原因

当func()被调用时,内部的for循环启动gen()生成器的迭代:

  • 第一次迭代时,生成器执行到yield 1,把1返回给变量x,紧接着return x直接终止了for循环,生成器的迭代被提前中断。
  • 在Python中,如果生成器的迭代没有正常完成(比如被提前终止、生成器对象被垃圾回收),解释器会自动向生成器抛出GeneratorExit异常,目的是让生成器有机会执行清理逻辑。
  • 因为gen()里的yield语句被包裹在try块中,抛出的GeneratorExit被except块捕获,于是执行print('hi')。
  • 之后func()返回1,外层的print(func())输出这个返回值,所以最终先打印hi,再打印1。

引发的具体异常

触发的具体异常是GeneratorExit,它是Python内置的异常类,继承自BaseException(而非普通的Exception),专门用于通知生成器即将被销毁。代码里的except:会捕获所有类型的异常(包括BaseException的子类),所以能触发对应的打印逻辑。

内容的提问来源于stack exchange,提问作者alexwong123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:40:04