美文网首页
Python 中的 try-except 语句

Python 中的 try-except 语句

作者: Monsty | 来源:发表于2018-07-31 15:16 被阅读0次

      在 Python 中,使用异常来控制流程十分普遍,Python 的核心开发者也常常这么做。这种风格也深植于语言源码中,例如迭代器协议使用 StopIteration 异常作为循环终止信号。另外,在某些 “先判断再执行” 结构中,try-except 风格可以避免条件的不确定性。比如测试 os.path.exists(path) 的结果可能和你真正使用路径的时候不同(有其他进程在判定和执行之间创建或者删除了你检查的路径)。同样, Queue.full() 的结果也可能是不过期的。在这种需要检查和执行同时进行的情况下, try-exceptif-else 风格的代码更加可靠。
      在其他的一些语言中,“异常不是错误” 的规则反应在了标准库的规范中,这种规则也部分考虑了语言的性能需要。Python 的规范有一些不同:大部分情况下,你必须使用异常来控制流程。另外,使用异常也不会降低被 try 包裹的语句的运行速度,因为不管你有没有使用异常语句,CPython 都会在每一步进行异常检查。换句话说,“异常是一些例外情况” 这一规则在某些其他语言中是有意义的,但在 Python 中没有。
      除了用于避免if条件变化,异常也常用于把错误处理移出循环,对于解释型语言来说这是很重要的优化,不必自动外提循环不变代码。此外,异常可以使处理问题的代码能远离问题出现的地方从而简化代码。 例如,有顶级用户界面代码调用业务逻辑代码,后者又调用低级例程。 低级例程中出现的异常(例如数据库访问中唯一键的重复记录)只能在顶级代码中处理(例如向用户询问与现有密钥不冲突的新密钥)。 对这种控制流使用异常允许中级例程完全忽略该问题,并且可以很好地与流控制的这一方面分离。(见这里以及这里)
      else 语句很有趣,当没有异常时,他会优于 finally 语句执行,这是它的初始目的。如果没有 else ,在 finally 之前运行其他代码的唯一选择就是将代码添加到 try 代码块的尾部,由于添加这些代码亦可产生异常,这使得 except 难以区分哪些代码的异常需要捕获而哪些不需要。

    相关文章

      网友评论

          本文标题:Python 中的 try-except 语句

          本文链接:https://www.haomeiwen.com/subject/bnqhvftx.html