手写 Python 虚拟机
海纳
华为资深编译专家,原 Huawei JDK 团队负责人
1301 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 31 讲/共 31 讲
导学|直播加餐:三小时掌握C++ (3讲)
手写 Python 虚拟机
15
15
1.0x
00:00/00:00
登录|注册

27|异常(上):优雅高效地处理运行时发生的错误

你好,我是海纳。
到目前为止,我们的虚拟机已经具备很多功能了,比如控制流、函数、对象、模块系统都已经构建完了。在这些机制的基础之上,我们才能完成迭代这一个基本功能。
迭代是 Python 中非常重要的一个机制,在实现列表和字典的时候,我们花了很大的精力介绍它们的迭代器。实际上,在 Python 中,自定义类型也可以定义迭代器。这种自定义迭代器需要依赖很多重要的功能作为基础,到目前为止,我们还差一个功能尚未完成,就是异常。因为 Python 虚拟机使用 StopIteration 异常来标志迭代结束。
这节课,我们将重点实现异常的处理机制。异常的处理需要增加新的控制流处理方式,我们从最简单的情况开始,逐步实现它。

实现 finally 子句

我们先看一个例子。
def foo():
try:
print("hello")
return
print("hi") # will not be executed
finally:
# will be executed
print("world")
foo()
上述代码的执行结果是打印“hello”和“world”两个字符串。也就是说,return 语句(第 4 行)执行以后,函数并没有立即返回,而是打印完 “world”(第 8 行)以后才结束。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. Python虚拟机使用StopIteration异常来标志迭代结束,异常处理是Python中的重要机制之一。 2. 异常处理需要保存异常状态,包括异常对象、异常类型和Traceback对象,以备后续恢复。 3. 实现相关的数据结构来支持异常处理的机制。 4. 在虚拟机中增加Exception类型,可以在builtin模块中定义异常类。 5. 通过分析字节码来研究异常产生的过程和影响控制流的方式。 6. 通过分析字节码来理解异常处理的机制,包括异常类型匹配和异常对象的恢复。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手写 Python 虚拟机》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部