92、Python之异常:异常的概念及异常处理机制

92、Python之异常:异常的概念及异常处理机制

文章图片

92、Python之异常:异常的概念及异常处理机制

文章图片

92、Python之异常:异常的概念及异常处理机制

文章图片


引言在Python的编程实践中 , 异常处理是一个非常重要的主题 。
异常指的是程序在运行过程中可能出现的错误或者意外情况 , 合理地处理这些异常可以提高程序的健壮性和用户体验 。
本文将详细介绍一下Python中的异常的概念和异常处理机制 。
本文的主要内容有:
1、异常的概念
2、异常的分类
3、异常的处理机制
异常的概念所谓异常 , 是指程序在执行的过程中发生的错误或者意外情况 , 它们会中断程序的正常执行流程 。
在Python中一切皆对象 , 异常自然也不例外 。 在Python中所有的异常都继承自BaseException类 。

【92、Python之异常:异常的概念及异常处理机制】此外 , Exception也是一个比较常见的异常对象 , 它是所有非致命异常的父类:

异常的分类关于异常 , 其实有很多种不同的分类方式 , 这里 , 我们简单介绍比较重要的两种分类方式 。
1、异常的来源
从异常的来源的角度 , 可以把异常分为内置异常和用户自定义异常 。
1)内置异常(Built-in Exceptions):Python中自带的异常类型 , 用于处理程序中通用的常见的错误 。
2)用户自定义异常(User-defined Exceptions):开发者根据具体的业务场景需要 , 自行定义的异常类型 。
这是最常见的一种分类方法 。
2、异常的严重程度
从异常的严重程度 , 可以把异常分为非致命性异常和致命性异常 。
1)非致命性异常(non-exit Exceptions):需要说明的是 , non-exit异常 , 并不是一个标准的专业术语 , 它通常指的是那些不会导致程序立即停止执行(非致命)的异常 。 这类异常可以被捕获和处理 , 从而使得程序能够继续执行下去 。 一般而言 , 这些异常包括各种运行时异常(Runtime Exceptions) , 如IndexError、KeyError等 。
2)致命性异常(exit Exceptions):与non-exit的概念相对 , 指的是那些会导致程序立即停止运行的异常 。 通常 , 这些程序是致命性的(Fatal) , 它们通常无法通过常规的异常处理机制(try-except结构)来使程序恢复执行 。 理解这类异常有助于编写更加健壮的程序 , 并且在设计应用时能够更好地应对各种突发状况 。 这种异常通常需要在架构设计方面 , 采用冗余策略 , 实现容错机制 。
异常的处理机制在Python中 , 针对non-exit异常 , 主要是通过try...except...else...finally语法结构的各种组合 , 来实现这类异常的处理 。
try语句块:负责对可能产生异常的语句块进行包裹、测试
except语句块:当try语句块中发生异常时 , 会自动跳转到except语句块 , 进入相应捕获的异常类型进行对应的异常处理操作 , 如果异常没有被正确捕获 , 则会击穿 , 向更高层的语法结构抛出当前异常对象 , 直至最终终止程序的执行 。
else语句块:如果try语句块中没有发生异常 , 则会跳转到else语句块来执行相应的无异常时的处理逻辑 。
finally语句块:无论是否发生异常 , 最终都会执行该语句块 , 通常执行一些必须执行的操作 , 比如资源的释放和清理操作 。
通过代码简单验证一下non-exit异常的处理机制:

当前 , b = 0 , 会触发ZeroDivisionError异常 , 程序执行结果:

当我们把b 赋值为 2(任意一个非0的数字) , 则程序执行结果如下:

从这两个执行结果 , 可以验证我们上面所介绍的各个语句块的执行逻辑 。
需要说明的是 , 在进行异常捕获时 , 并不一定需要把4个语句块写完整 , 而且 , 可以根据需要写多个except语句块 。 具体使用可以根据需求场景来自行组合实现 。
此外 , 针对exit异常 , 虽然通常难以使用上面的常规异常处理机制 , 还是有一些策略来帮助进行预防和减轻它们的影响的:
1、内存管理:
1)优化代码 , 避免不必要的大量数据操作 。
2)使用前面我们介绍过的迭代器和生成器来减少内存的占用 。
3)定期进行内存清理和回收 。
2、控制递归深度:
1)确保递归函数有终止条件 。
2)使用循环对尾递归或者过深的递归进行改造 。
3、有效使用断言:
1)在开发和测试阶段使用断言来捕获潜在的问题 , 但是在生产环境中避免使用 。
2)使用单元测试和其他测试方法来确保代码的正确性 。
4、捕获和处理SystemExit:
在需要明确终止程序时 , 使用sys.exit() , 但在大多数情况下避免捕获SystemExit , 以便程序能够正常退出 。
总结本文首先介绍了Python中异常的概念 , 然后介绍了Python中异常的两种分类 , 最后介绍了在Python中通过try...except...else...finally进行非致命异常的处理机制 , 以及应对致命异常的一些策略 。
以上就是本文的全部内容了 , 希望对您有所帮助 。

    推荐阅读