在 Python 中,使用异常来控制流程十分普遍,Python 的核心开发者也常常这么做。这种风格也深植于语言源码中,例如迭代器协议使用 StopIteration 异常作为循环终止信号。另外,在某些 “先判断再执行” 结构中,try-except 风格可以避免条件的不确定性。比如测试 os.path.exists(path) 的结果可能和你真正使用路径的时候不同(有其他进程在判定和执行之间创建或者删除了你检查的路径)。同样, Queue.full() 的结果也可能是不过期的。在这种需要检查和执行同时进行的情况下, try-except 比 if-else 风格的代码更加可靠。
在其他的一些语言中,“异常不是错误” 的规则反应在了标准库的规范中,这种规则也部分考虑了语言的性能需要。Python 的规范有一些不同:大部分情况下,你必须使用异常来控制流程。另外,使用异常也不会降低被 try 包裹的语句的运行速度,因为不管你有没有使用异常语句,CPython 都会在每一步进行异常检查。换句话说,“异常是一些例外情况” 这一规则在某些其他语言中是有意义的,但在 Python 中没有。
除了用于避免if条件变化,异常也常用于把错误处理移出循环,对于解释型语言来说这是很重要的优化,不必自动外提循环不变代码。此外,异常可以使处理问题的代码能远离问题出现的地方从而简化代码。 例如,有顶级用户界面代码调用业务逻辑代码,后者又调用低级例程。 低级例程中出现的异常(例如数据库访问中唯一键的重复记录)只能在顶级代码中处理(例如向用户询问与现有密钥不冲突的新密钥)。 对这种控制流使用异常允许中级例程完全忽略该问题,并且可以很好地与流控制的这一方面分离。(见这里以及这里)
else 语句很有趣,当没有异常时,他会优于 finally 语句执行,这是它的初始目的。如果没有 else ,在 finally 之前运行其他代码的唯一选择就是将代码添加到 try 代码块的尾部,由于添加这些代码亦可产生异常,这使得 except 难以区分哪些代码的异常需要捕获而哪些不需要。
Python 中的 try-except 语句
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 前言 ||| 第二章 使用ArcPy编写脚本 Python支持大部分在其他语言中出现的编程结构。在本章内容中,我们...
- 电池状态栏。//方法一(代码设置):现在ios7已经更改为透明,并且不占用屏幕高度。其中隐藏及显示的方法如下:在u...