前言:
作者简介:短尾巴小鳄鱼 ,一位不放弃自己的上进卷妹
💬 如果文章知识点有错误的地方,请留言指正~和大家一起学习,一起进步
💬 人生格言:昨日种种,皆成今我。今日种种,方成新我。切莫踌躇,莫停留,莫沉溺💬
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦
文章目录
- python中的异常:断言
- 断言--assert
python中的异常:断言
断言–assert
用于判断一个表达式,在表达式条件为false的时候触发异常
断言assert与raise的区别:
- raise是直接抛出异常,而assert是先进行一次判断,根据结果选择是否抛出异常
- 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)