python自定义异常和主动抛出异常

python自定义异常和主动抛出异常

自定义异常主要是利用了自己定义的异常类的名字,对异常进行分门别类,再没有别的作用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import re
import os
class ExistsError(Exception):
    pass
class KeyInvalidError(Exception):
    pass
def fun(path,mnk):
    """
    去path路径的文件中,找到前缀为prev的一行数据,获取数据并返回给调用者。
        1000,成功
        1001,文件不存在
        1002,关键字为空
        1003,未知错误
        ...
    :return:
    """
    response = {'code': 1000, 'data': None}
    try:
        with  open(path,encoding="utf-8") as f1:
            line=f1.readline()
            str = re.match("mnk", line)
        if not os.path.exists(path):
            raise Exception() #抛出的是ExistsError类的一个实例
        if not str:
            raise KeyInvalidError()
 
    except ExistsError as e:                #下面的捕获异常是逐行往下匹配的,只要捕获到异常就不往下执行了
        response['code']=1003               #捕获异常以后可以做一些自己定义的东西
        print(response['code'])
    except Exception as e:                  #**自己定义多个异常类名的目的就是将来区分不同的错误类型,再没有别的意思
        response['code'] = 1004
        print(response['code'])
fun(r"E:\day26\s15day26\test", "p")

 

下面是对主动抛出异常的一点总结

1
2
3
4
5
6
7
8
9
10
11
12
13
#知识点:如何自定义类
class MyException(Exception):                   #让MyException类继承Exception
    def __init__(self,name,age):
        self.name = name
        self.age = age
try:
    #知识点:主动抛出异常,就是实例化一个异常类
    raise MyException("zhansgan",19)            #实例化一个异常,实例化的时候需要传参数
except MyException as obj:                      #这里体现一个封装,
    print(obj.age,obj.name)                     #捕获的就是MyException类携带过来的信息
 
except Exception as obj:                        #万能捕获,之前的可能捕获不到,这里添加Exception作为保底
    print(obj)

  

posted @   solomon123  阅读(10870)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示