1. 异常:因为程序出现了错误而在正常控制流以外采取的行为,行为阶段: 触发异常-检测(采取措施)
  2. 常见异常: NameError ZeroDivisionError SyntaxError IndexError ​ ​ KeyError IOError AttributeError
  3. try-except*-[else]:一般用法, 若无异常进else try-finally:不用来捕获异常, 用来维持一致性的行为(如file.close()) try-except*-[else]-finally:无论是否有异常, 最后都会运行finally 配合用法:保证共享的资源的唯一分配, 并在任务结束的时候释放它(如IO、线程资源、数据库连接)
  4. 如果异常发生后没有找到合适的处理器, 则会不断向上移交, 若到顶层仍未找到, 解释器会显示出跟踪记录(Traceback)并退出
  5. 一个except子句可以处理多个异常:要求异常被放在一个元祖
  6. 非错误条件触发的异常:SystemExit(Python应用需要退出) KeyboardInterupt(用户按了^C)
  7. python2.5起, 异常迁移到新式类(之前是字符串)后的异常基类:BaseException, 而且上条两个特殊错误被移至与Exception同级
  8. 避免把大片的代码装入try-except中然后使用pass忽略掉错误
  9. 每个异常都会生成自己的异常参数, 异常参数(Exception, e:中的e)自身会组成一个元祖并存储为类实例的属性, 引发异常时最好提供和相应的参数信息
  10. 如果finally中引发了另一个异常或有returnbreakcontinue语法而终止, 原异常将丢失而且无法重新引发
  11. with(try-except-finally的抽象化),只能工作于支持上下文管理协议的对象
  12. withas间的内容是上下文符号, 用它来获得一个上下文管理器去提供(自身也可以是)一个上下文对象(通过__context__()方法) 在获得上下文对象后调用__enter__()来完成with语句块执行前的准备工作, 若无声明变量丢弃返回值 with语句块执行完无论结果如何都会调用对象的__exit__()方法(三个参数:等于sys.exc_info()返回的类型跟踪记录) 用contextlib模块可以更方便使用上下文管理
  13. 字符串做为异常很少使用并且快被废弃,不能用
  14. 触发异常 raise[ExceptionName(字符串/类/实例)[,args(元祖/单元素元祖),traceback(新的, 便于重新引发异常)]]raise无参数时引发的是当前代码块最近触发的一个异常(如果没有, 会生成TypeError)
  15. 断言assert(相当于raise-if):如果断言不成功, 触发AssertionError, 如果没被异常捕捉,将终止程序运行并且提供追踪记录 可在判断后添加异常参数(一般是字符串)
  16. P255标准异常集 BaseException -> SystemExit, KeyboardInterrupt,Exception(包含所有内建异常)
  17. 另一种获取异常信息的途径是sys.exc_info():提供一个三元组(类,类实例,跟踪记录)