【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

相关推荐
未若君雅裁2 分钟前
LeetCode 51 - N皇后问题 详解笔记
java·数据结构·笔记·算法·leetcode·剪枝
破烂pan3 分钟前
lmdeploy.pytorch 新模型支持代码修改
python·深度学习·llm·lmdeploy
麦麦大数据1 小时前
F047 vue3+flask微博舆情推荐可视化问答系统
python·flask·知识图谱·neo4j·推荐算法·舆情分析·舆情监测
MediaTea1 小时前
Python 第三方库:Flask(轻量级 Web 框架)
开发语言·前端·后端·python·flask
java干货1 小时前
Spring Boot 为什么“抛弃”了 spring.factories?
spring boot·python·spring
Q***f6352 小时前
后端消息队列学习资源,RabbitMQ+Kafka
学习·kafka·rabbitmq
2501_941111822 小时前
使用Python进行网络设备自动配置
jvm·数据库·python
源码之家2 小时前
基于python租房大数据分析系统 房屋数据分析推荐 scrapy爬虫+可视化大屏 贝壳租房网 计算机毕业设计 推荐系统(源码+文档)✅
大数据·爬虫·python·scrapy·数据分析·推荐算法·租房
源码之家2 小时前
机器学习:基于python租房推荐系统 预测算法 协同过滤推荐算法 房源信息 可视化 机器学习-线性回归预测模型 Flask框架(源码+文档)✅
大数据·python·算法·机器学习·数据分析·线性回归·推荐算法