异常对象

    2.在语句进行except ExceptionType子句匹配时,采用的是isinstance(exception_obj,ExceptionType)这种匹配规则。因此如果ExceptionTypeexception_obj所属类的超类,则匹配也成功。

    3.Python中的内置异常类继承树:

    • 用户自定义异常类不要直接从BaseException继承。BaseException提供了默认的打印和状态保持行为
      • 在构造时传给异常类的所有参数都将作为一个元组存储在.args属性中
      • 在构造时传入的字符串作为.__str(self)__方法返回。如果传入的不是字符串,
        则将先调用str()将该参数转换为字符串
    • Exception是所有内置异常类的超类。用户自定义的异常类都继承自它

    4.自定义异常类:通常继承自Exception

    • 若想自定义打印显示,则必须重写.__str__(self)方法
    • 用户的自定义异常类

    5.Python在运行时会将try语句放入堆栈中。抛出异常时,Python跳转至最近的try块中,找到匹配该异常的异常处理器(即except子句),执行异常处理的except子句。一旦异常被捕获并且处理,则其生命周期结束

    • 异常的传递:向上返回到先前进入但是尚未离开的try

    6.Python中所有的错误都是异常。但是并非所有的异常都是错误

    • 内置的input函数每次调用时,遇到文件末尾时引发内置的EOFError
    • 在键盘上按下Ctrl-C键时,会触发KeyboardInterrupt异常

    8.try...finally通常用于释放系统资源。虽然垃圾收集时资源会自动释放,但是垃圾收集的时机不可控,由算法自动调度

    9.可以在顶层代码中使用try以及空的except来进行调试,从捕获程序有什么意外情况发生

    10.sys.exc_info()函数返回最近引发的异常信息,它返回一个三元素的元组:(type,value,traceback)

    • type:异常类型
    • value:异常实例对象
    • traceback:一个traceback对象,代表异常发生时所调用的堆栈

      sys.exc_info函数

    • 但是太具体化不利于扩展