27|异常(上):优雅高效地处理运行时发生的错误
海纳
你好,我是海纳。
到目前为止,我们的虚拟机已经具备很多功能了,比如控制流、函数、对象、模块系统都已经构建完了。在这些机制的基础之上,我们才能完成迭代这一个基本功能。
迭代是 Python 中非常重要的一个机制,在实现列表和字典的时候,我们花了很大的精力介绍它们的迭代器。实际上,在 Python 中,自定义类型也可以定义迭代器。这种自定义迭代器需要依赖很多重要的功能作为基础,到目前为止,我们还差一个功能尚未完成,就是异常。因为 Python 虚拟机使用 StopIteration 异常来标志迭代结束。
这节课,我们将重点实现异常的处理机制。异常的处理需要增加新的控制流处理方式,我们从最简单的情况开始,逐步实现它。
实现 finally 子句
我们先看一个例子。
上述代码的执行结果是打印“hello”和“world”两个字符串。也就是说,return 语句(第 4 行)执行以后,函数并没有立即返回,而是打印完 “world”(第 8 行)以后才结束。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
1. Python虚拟机使用StopIteration异常来标志迭代结束,异常处理是Python中的重要机制之一。 2. 异常处理需要保存异常状态,包括异常对象、异常类型和Traceback对象,以备后续恢复。 3. 实现相关的数据结构来支持异常处理的机制。 4. 在虚拟机中增加Exception类型,可以在builtin模块中定义异常类。 5. 通过分析字节码来研究异常产生的过程和影响控制流的方式。 6. 通过分析字节码来理解异常处理的机制,包括异常类型匹配和异常对象的恢复。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手写 Python 虚拟机》,新⼈⾸单¥59
《手写 Python 虚拟机》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论