【Python】python中“异常类“学习笔记

文章目录

介绍

  1. 常用的异常类继承关系
  2. 异常类的捕捉
  3. 同时处理多个异常
  4. raise异常
  5. 自定义异常

常用异常类继承关系

SystemExit:该异常通常是由sys.exit()函数引发的,用于请求程序的正常退出,当程序执行到这个异常时,会终止当前进程,并返回到调用它的父进程或者命令行终端。

KeyboardInterupt:通常由用户执行中断操作,比如按下Ctrl+C来终止当前正在运行的程序。当程序执行到这个异常的时候,会立即停止当前操作并跳出当前的代码块。

Exception: 如果我们想自定义异常,我们的异常应该继承自该类

异常类的捕捉

在try...except...语句中,可以使用特定的异常类来捕捉错误,也可以使用父类型的异常类来捕捉。如何理解这句话呢?

代码示例:

python 复制代码
def main():
	num = 2
	s = 0
	res = num/s
	print(res)
if __name__ == "__main__":
    main()

上述代码会报错:(因为我们除以了一个0)

File "test.py", line 47, in main

res = num/s

~~~^~

ZeroDivisionError: division by zero

这个时候我们可以使用try...except...来防止程序崩溃

python 复制代码
def main():
    try:
        num = 2
        s = 0
        res = num/s
        print(res)
    except ZeroDivisionError:
        print("error")
        
if __name__ == "__main__":
    main()

当我们点进去ZeroDivisionError这个异常时我们发现,它继承自ArithmeticError这个异常类,因此我们修改程序,使用父类型的异常类来捕捉,程序也不会崩溃:

python 复制代码
def main():
    try:
        num = 2
        s = 0
        res = num/s
        print(res)
    except ArithmeticError:
        print("error")

if __name__ == "__main__":
    main()

注意:不能用一个与ZeroDivisionError不相关的类型去捕捉异常,否则会导致程序崩溃

同时处理多个异常

在同时捕捉多个异常的时候,需要先捕捉子类型的异常,后捕捉父类型的异常。

如果先抓夫类型的异常,子类型永远不会有机会被抓住

raise异常

可以在代码中通过raise异常的方式来向调用者返回错误信息

python 复制代码
raise 异常类对象

代码示例:

python 复制代码
def add(n1, n2):
    if not isinstance(n1, int) or not isinstance(n2, int):
        raise Exception("Argument is not int")
    
    return n1 + n2

if __name__ == "__main__":
    try:
        add(1,"2")
    except Exception as e:
        print(e)

代码输出:

bash 复制代码
Argument is not int

自定义异常类

通过继承Exception类来自定义一个异常类

python 复制代码
class InvalidArgumentException(Exception):
    def __init__(self, *args):
        super().__init__(args)


def add(n1, n2):
    if not isinstance(n1, int) or not isinstance(n2, int):
        raise InvalidArgumentException("Argument is not int")
    
    return n1 + n2

if __name__ == "__main__":
    try:
        add(1,"2")
    except InvalidArgumentException as err:
        print(err)

本文参考:

https://www.bilibili.com/video/BV1Q8411b79P/?spm_id_from=333.788\&vd_source=cf0b4c9c919d381324e8f3466e714d7a

相关推荐
吴声子夜歌15 分钟前
Linux命令——学习Shell(三)
linux·chrome·学习
sylviiiiiia24 分钟前
leetcode hot100
python·算法·leetcode
千里码aicood35 分钟前
flask-基于注意力机制的异常流量检测与自动防御系统
后端·python·flask
维克兜率天36 分钟前
4.3.2.1 日常监控:上线只是开始
服务器·数据库·python·区块链·php·量化
the局外人43 分钟前
学习 FastAPI 的 Day 2:用异步 ORM 完成增删改查
后端·python·fastapi
小猪佩奇TONY44 分钟前
Linux 内核学习(18) --- linux dma_buf 机制
linux·运维·学习
智搜广告1 小时前
GEO优化公司怎么选?智搜广告从三个维度帮你判断
大数据·人工智能·python·elasticsearch·microsoft·geo
叶子野格1 小时前
《Verilog学习:数字系统设计基础》
学习·fpga开发
边境悍匪1 小时前
蜗牛学苑 Java 智能体学习 Day36|阿里云 OSS 文件上传、Spring 事务、全局异常思维导图复盘
java·学习·阿里云
LuminousCPP1 小时前
数据结构-排序(一):基础排序算法横向对比|冒泡、插入、希尔、堆与双向选择,详解二分 / Knuth 增量
c语言·数据结构·笔记·算法·排序算法