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

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

python中的异常:断言

断言–assert

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

断言assert与raise的区别:

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

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

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

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

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

例子:

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

  • 参数数量检验:必须是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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值