【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

相关推荐
0wioiw01 分钟前
Ubuntu基础(Python虚拟环境和Vue)
linux·python·ubuntu
xiao5kou4chang6kai410 分钟前
Python-GEE遥感云大数据分析与可视化(如何建立基于云计算的森林监测预警系统)
python·数据分析·云计算·森林监测·森林管理
rui锐rui14 分钟前
大数据学习6:Sqoop数据迁移工具
大数据·学习·sqoop
presenttttt18 分钟前
用Python和OpenCV从零搭建一个完整的双目视觉系统(四)
开发语言·python·opencv·计算机视觉
psybrain22 分钟前
脑科学圈| 利用眼动追踪评估演讲情境下焦虑障碍儿童的注视行为
学习·心理学·脑科学·课堂·焦虑·儿童青少年·眼动
笑衬人心。1 小时前
Java 17 新特性笔记
java·开发语言·笔记
序属秋秋秋2 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
许白掰2 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
木头左3 小时前
逻辑回归的Python实现与优化
python·算法·逻辑回归
B1nna3 小时前
Docker学习
学习·docker·容器