前后端知识库 前后端知识库
首页
    • JavaScript
    • React
    • Vue
  • Python
  • Sanic
  • Linux
  • Ansible
归档
GitHub (opens new window)
首页
    • JavaScript
    • React
    • Vue
  • Python
  • Sanic
  • Linux
  • Ansible
归档
GitHub (opens new window)
  • Sanic

  • Python

    • Python 的动态类型介绍
    • 数字类型
    • Set类型
    • 字符串
    • 列表
    • 元组
    • 通用序列
    • 字典
    • 文件
    • 语句和语法
    • 赋值语句
    • 打印
    • if语句
    • loop循环
    • 迭代器和生成器
    • 文档
    • 函数
    • 作用域
    • 参数
    • 函数的高级特性
    • 模块
    • 模块包
    • 模块高级用法
    • 类 class
    • Python命名空间
    • 运算符重载
    • 类的设计模式
    • 类的高级主题
    • 异常
    • 异常对象
    • Unicode与字节串
    • 管理属性
    • 装饰器
    • 元类
    • 执行细节
  • backend
  • Python
devin
2023-09-09

异常对象

# 异常对象

1.Python3 中,内置异常与用户自定义异常都是类的实例对象

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

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

graph BT
id1(OverflowError) -->|继承|id2(ArithmeticError)
id2 -->|继承|id3(Exception)
id4(IndexError) -->|继承|id3
id3-->|继承|id5(BaseException)
1
2
3
4
5
  • 用户自定义异常类不要直接从BaseException继承。BaseException提供了默认的打印和状态保持行为

    • 在构造时传给异常类的所有参数都将作为一个元组存储在.args属性中
    • 在构造时传入的字符串作为.__str(self)__方法返回。如果传入的不是字符串, 则将先调用str()将该参数转换为字符串
  • Exception是所有内置异常类的超类。用户自定义的异常类都继承自它 * 系统退出事件SystemExit、KeyboardInterrupt、GeneratorExit不能继承自它

    BaseException

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

  • 若想自定义打印显示,则必须重写.__str__(self)方法

  • 如果想定制初始化方法,必须重写.__init__(self,args)方法。此时超类的.args属性同样也会起作用

    用户的自定义异常类

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

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

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

  • 内置的input函数每次调用时,遇到文件末尾时引发内置的EOFError

  • 调用sys.exit()会触发SystemExit异常

  • 在键盘上按下Ctrl-C键时,会触发KeyboardInterrupt异常

    系统级的异常事件

    7.用户自定义的异常可以用于触发信号条件。这是利用异常来传递信息的方法

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

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

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

  • type:异常类型

  • value:异常实例对象

  • traceback:一个traceback对象,代表异常发生时所调用的堆栈

    sys.exc_info函数

    11.为了拦截具体的异常,except应该具体化,避免拦截无关事件

  • 空的except子句拦截任何异常,包括内存错误、系统推出、键盘中断等等

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

编辑 (opens new window)
上次更新: 2023/09/09, 12:09:00
异常
Unicode与字节串

← 异常 Unicode与字节串→

Theme by Vdoing | Copyright © 2023-2023 devin | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式