【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

相关推荐
生活爱好者!1 分钟前
AI加持的笔记工具,比备忘录好用,NAS一键部署blinko
人工智能·笔记
24计网1王仔寿3 分钟前
Linux 系统运维全栈学习路线|从 Shell 脚本到容器云 OpenStack 完整学习指南
linux·学习·openstack
摇滚侠7 分钟前
Apache Skywalking 实战 阅读笔记 第一章
笔记·apache·skywalking
AOwhisky7 分钟前
Kubernetes(K8s)学习笔记(第十四期):集群存储与有状态应用(下篇):StatefulSet 有状态应用管理
redis·笔记·mysql·云原生·kubernetes·云计算·k8s
许彰午9 分钟前
73_Python爬虫Scrapy框架入门
爬虫·python·scrapy
@realXuan15 分钟前
人工智能AI编程 Agent 入门系列教程之 Claude Code 是什么
人工智能·python·ai编程
孤狼warrior20 分钟前
从冒泡到传送带流水线:一个3D沉浸式算法靶场,让思想的伟力改变世界
python·算法·typescript
搬砖柯23 分钟前
系列11-测试平台 MCP Server 实践:用 Kimi Code 自然语言查项目、跑 API 回归
人工智能·python·ai·开源·自动化
来生硬件工程师24 分钟前
【硬件笔记】DCDC电源设计—BUCK电路设计要点
笔记·单片机·嵌入式硬件·硬件工程·智能硬件
向阳是我24 分钟前
在 Mac(M2)上用 faster-whisper 实现高精度中文语音转文字
python·macos·ai·whisper·语音识别