功能介绍

异常是一种语言特性,专门用于处理程序执行期间的不正常情况。异常的最常见用途就是处理程序执行期间出现的错误,但也可以有效用于很多奇台目的。

使用说明

异常是Python函数用raise语句自动生成的对象。在异常对象生成后,引发异常的raise语句将改变Python程序的执行方式,这与正常的执行流程不同了。
捕获并处理异常用到try、except,有时还会用到else关键字。

  1. try:
  2. body #执行该段代码
  3. except exception_type1 as var1:
  4. exception_code1 #如果body代码中有exception_type1类型的异常,那么进行exception_code1的处理
  5. except exception_type2 as var2:
  6. exception_code2 #如果body代码中有exception_type2类型的异常,那么进行exception_code2的处理
  7. except:
  8. default_exception_code # body代码中有其他类型(非exception_type1和exception_type2类型)的异常,那么进行default_exception_code的处理
  9. else: #很少用到,当body中没有抛出throw任何错误的时候,该语句才会执行
  10. else_body
  11. finally: #该语句也是可选的,在try、except、else部分都执行完毕后执行
  12. finally_body

自定义异常

  1. class MyError(Exception):
  2. pass
  3. #以上代码创建了一个类(关于类的详细描述,后续在OOP章节中再介绍),该类将继承基类Exception中的所有内容
  4. #可以通过如下方式在Python中使用
  5. try:
  6. raise MyError('抛出错误')
  7. except MyError as my:
  8. print('错误信息',my)
  9. #错误信息 抛出错误

assert语句是raise语句的特殊形式,形式如下
assert expression,argument
如果expression的结算结果为False,同事系统变量debug也为True,则会引发携带可选参数argument的AssertError异常。

  1. name = []
  2. assert len(name)>1 ,'测试'
  3. #打印内容如下
  4. '''Traceback (most recent call last):
  5. File "C:/Users/Administrator/PycharmProjects/Demo/Test.py", line 2, in <module>
  6. assert len(name)>1 ,'测试'
  7. AssertionError: 测试'''

with关键字的上下文管理器

在某些场景下,存在务必要做的操作,文件的读取,打开一个文件后,当读写完毕时,一定会关闭这个文件,那么这个关闭操作即为务必要做的操作,通常代码如下所写

  1. try:
  2. infile = open(filename)
  3. data = infile.read()
  4. finally:
  5. infole.close() #此操作即为务必执行的操作

Python3为这种情景提供了一种更加通用的解决方案,即上下文管理器。上下文管理器将代码块包裹起来,对进入和离开代码块的操作进行集中管理。用with关键字进行标记。文件对象就是一种上下文管理器,可以如下操作:

  1. with open(filename) as infile:
  2. data = infile.read()

上下文管理器非常适合于资源加/解锁,关闭文件,提交数据库事务之类的操作。

练习题