【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

相关推荐
B站计算机毕业设计之家11 小时前
Python手势识别检测系统 基于MediaPipe的改进SSD算法 opencv+mediapipe 深度学习 大数据 (建议收藏)✅
python·深度学习·opencv·计算机视觉·1024程序员节
分布式存储与RustFS12 小时前
RustFS:MinIO的“平替”还是“乱杀”?
python·rust·对象存储·minio·存储·企业存储·rustfs
爱幻想-hjyp12 小时前
【Python】uv包管理器常用命令
开发语言·python·uv
用什么都重名12 小时前
UV工具安装配置使用教程
python·uv·包管理器
牛马大师兄12 小时前
STM32实现低功耗管理使用配置知识梳理笔记
笔记·stm32·单片机·嵌入式硬件·物联网·低功耗
Python×CATIA工业智造12 小时前
Python装饰器解包装技术详解:从原理到高级应用
python·pycharm
王哈哈^_^13 小时前
PyTorch vs TensorFlow:从入门到落地的全方位对比
人工智能·pytorch·python·深度学习·计算机视觉·tensorflow·1024程序员节
刘逸潇200513 小时前
Python并发编程
python
deng-c-f14 小时前
Linux C/C++ 学习日记(32):协程(二):Ntyco源码解析
学习·协程·ntyco
Victory_orsh14 小时前
“自然搞懂”深度学习系列(基于Pytorch架构)——02小试牛刀
人工智能·python·深度学习·神经网络·机器学习