• Python基础入门篇【38】-异常:断言assert与raise的使用


    前言
    作者简介:短尾巴小鳄鱼 ,一位不放弃自己的上进卷妹
    💬 如果文章知识点有错误的地方,请留言指正~和大家一起学习,一起进步
    💬 人生格言:昨日种种,皆成今我。今日种种,方成新我。切莫踌躇,莫停留,莫沉溺💬
    如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦

    python中的异常:断言

    断言–assert

    用于判断一个表达式,在表达式条件为false的时候触发异常

    断言assert与raise的区别:

    1. raise是直接抛出异常,而assert是先进行一次判断,根据结果选择是否抛出异常
    2. raise一般需要写一条判断语句,再写一条raise;assert一条语句就可以搞定,更加简洁
    assert expression, message
    # expression:表达式,一般是判断相等或判断是某种数据类型的bool判断语句
    # message:错误信息
    # 无返回值
    
    • 1
    • 2
    • 3
    • 4

    扩展–isinstance函数,判断数据类型

    isinstance()函数用来判断对象的数据类型是否是目标类型

    是就返回True,不是就返回False

    isinstance(对比的数据,目标类型)
    
    • 1

    例子:

    检验学生信息库里的新增学生方法的传参:

    • 参数数量检验:必须是4个
    • 参数名称检验:必须传入name,age,sex,class_number
    • 参数传入的值的数据类型检验:必须是name-字符串;age-整型;sex-字符串;class_number-字符串

    参考思路:

    第一步:参数数量检验可以直接使用断言assert,判断参数的长度必须等于4

    第二步:自定义一个异常类型,校验传入的参数名称是否正确,不正确则抛出这个异常

    第三步:使用isinstance()函数判断传入参数的值的数据类型,不符合就抛出TyprError的异常

    第四步:调用add函数的代码用try包裹,捕获异常的异常类型用通用异常类型

    参考代码:

    class ArgsError(Exception):
        def __init__(self, message):
            self.message = message
    
    
    class StudentsInfo(object):
        def __init__(self, students):
            self.students = students
    
            # 获取全部学生信息
    
        def get_all(self):
            for id_, value in self.students.items():
                print('学号:{} 姓名:{} 年龄:{} 性别:{} 班级:{}'.format(
                    id_, value['name'], value['age'], value['sex'], value['class_number']))
            return self.students
    
        # 新增学生
        def add(self, **kwargs):
            assert len(kwargs) == 4, '参数必须是4个'
            if 'name' not in kwargs:
                raise ArgsError('缺少姓名参数')
            if 'age' not in kwargs:
                raise ArgsError('缺少年龄参数')
            if 'sex' not in kwargs:
                raise ArgsError('缺少性别参数')
            if 'class_number' not in kwargs:
                raise ArgsError('缺少班级参数')
    
            # 判断传入的数据类型
            nam_value = kwargs['name']
            age_value = kwargs['age']
            sex_value = kwargs['sex']
            class_number_value = kwargs['class_number']
            if not isinstance(nam_value, str):
                raise TypeError('name不是一个字符串')
            if not isinstance(age_value, int):
                raise TypeError('age不是一个整型')
            if not isinstance(sex_value, str):
                raise TypeError('sex不是一个字符串')
            if not isinstance(class_number_value, str):
                raise TypeError('class_number不是一个字符串')
    
    
            id_ = max(self.students.keys()) + 1  # 定义新增的学生学号
            self.students[id_] = kwargs
    
    
    
    if __name__ == '__main__':
        try:
            student = StudentsInfo(students)
            student.add(name='aa', age='21', sex='girl', class_number='C')
            student.get_all()
        except Exception as e:
            print(e)
    
    • 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
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
  • 相关阅读:
    详细计算机专业毕业设计开题报告书写方法
    Pycharm设置项目的python环境与界面上terminal的shell运行环境
    C语言之读/写(fread/fwrite)文件(五十八)
    Redis(9)----RDB文件结构
    HTTP/HTTPS | 青训营笔记
    分布式锁的三种实现方式
    LLM大语言模型(典型ChatGPT)入门指南
    Vue单文件组件
    深入探讨虚拟现实中的新型安全威胁:“盗梦攻击”及其防御策略
    【Python零基础入门篇 · 34】:进程间的通信-Queue、进程池的构建
  • 原文地址:https://blog.csdn.net/weixin_44629511/article/details/126074614