python 断言详细讲解用法及其案例,python中断言的用法
本文主要介绍异常的最后一个知识点,3354断言。断言就是判断一个表达式,当表达式为假时触发异常。本文将通过实例详细介绍断言,需要的可以参考。
本章我们将学习异常的最后一个知识点——断言。断言就是判断一个表达式,当表达式为假时触发异常。我们可以检查表达式,表达式可以是条件语句中的语句,也可以是while循环中的语句。
都是判断一个东西真假,断言也是。当断言发现下面的表达式为假时,会主动抛出异常。
Assert是Python中断言的关键字。乍一看像是raise关键字的功能。其实assert断言比rais更简洁,rais生硬的抛出一个异常,而assert先做出判断,然后根据结果选择是否抛出异常。
比如我们对自己写的函数的结果做一个判断。如果选择raise,需要手动编写一个if-and-break条件语句,然后进行RAISE;Assert只用一行代码就可以轻松完成我们的任务。
断言的功能与语法
断言的作用:简单来说,断言是一个用于判断的表达式,当表达式的条件返回False时触发异常。
断言的语法:示例如下
#用法:
断言异常,消息
#参数:
#例外:表达式,一般判断为相等;或者是判断是否是某种数据类型的bool判断,然后决定是否抛出异常的语句。
# message:指具体的错误消息,可选参数,可选。(但建议填写)
#返回值:无返回值(虽然表达式有返回值,但assert没有;表达式Treu,assert不会触发任何异常)
看一个简单的例子:
断言1!=1,返回结果 False 1等于1
#执行结果如下:
# AssertionError:返回的结果“False”1等于1
# ********************************************
断言1 2,返回结果 False\ ,引发异常
#执行结果如下:
# AssertionError:返回结果“False”并引发异常。
断言小实战
接下来,我们将根据我们之前面向对象章节中Python中函数面向到面向对象学习的详细解释,添加异常和捕捉异常,然后添加一个批量添加函数。
源代码如下:
@Author:Neo
@Date:2020/1/16
@Filename:students_info.py
@Software:Pycharm
类NotArgError(异常):
def __init__(self,message):
self.message=消息
班级学生信息(对象):
def __init__(self,students):
学生=学生
定义get_by_id(self,student_id):
返回self.students.get(student_id)
def get_all_students(自己):
对于id_,self.students.items()中的值为:
打印(学号:{},姓名:{},年龄:{},性别:{},班级3360{} 。格式(
id_,值[姓名],值[年龄],值[性别],值[班级编号]
))
回归自我。学生
定义添加(自己,* *学生):
尝试:
self . check _ user _ info(* *学生)
e:除外
提高e
自我。_ _添加(* *学生)
定义添加(自身,新_
students):
for student in new_students:
try:
self.check_user_info(**student)
except Exception as e:
print(e, student.get(name))
continue
self.__add(**student)
def __add(self, **student):
new_id = max(self.students) + 1
self.students[new_id] = student
def delete(self, student_id):
if student_id not in self.students:
print({} 并不存在.format(student_id))
else:
user_info = self.students.pop(student_id)
print(学号是{}, {}同学的信息已经被删除了.format(student_id, user_info[name]))
def deletes(self, ids):
for id_ in ids:
if id_ not in self.students:
print(f{id_} 不存在学生库中)
continue
student_info = self.students.pop(id_)
print(f学号{id_} 学生{student_info["name"]} 已被移除)
def update(self, student_id, **kwargs):
if student_id not in self.students:
print(并不存在这个学号:{}.format(student_id))
try:
self.check_user_info(**kwargs)
except Exception as e:
raise e
self.students[student_id] = kwargs
print(同学信息更新完毕)
def updates(self, update_students):
for student in update_students:
try:
id_ = list(student.keys())[0]
except IndexError as e:
print(e)
continue
if id_ not in self.students:
print(f学号{id_} 不存在)
continue
user_info = student[id_]
try:
self.check_user_info(**user_info)
except Exception as e:
print(e)
continue
self.students[id_] = user_info
print(所有用户信息更新完成)
def search_users(self, **kwargs):
assert len(kwargs) == 1, 参数数量传递错误
values = list(self.students.values())
key = None
value = None
result = []
if name in kwargs:
key = name
value = kwargs[key]
elif sex in kwargs:
key = sex
value = kwargs[sex]
elif class_number in kwargs:
key = class_number
value = kwargs[key]
elif age in kwargs:
key = age
value = kwargs[key]
else:
raise NotArgError(没有发现搜索的关键字)
for user in values: # [{name, sex, age, class_number}, {}]
if value in user[key]:
result.append(user)
return result
def check_user_info(self, **kwargs):
assert len(kwargs) == 4, 参数必须是4个
if name not in kwargs:
raise NotArgError(没有发现学生姓名参数)
if age not in kwargs:
raise NotArgError(缺少学生年龄参数)
if sex not in kwargs:
raise NotArgError(缺少学生性别参数)
if class_number not in kwargs:
raise NotArgError(缺少学生班级参数)
name_value = kwargs[name] # type(name_value)
age_value = kwargs[age]
sex_value = kwargs[sex]
class_number_value = kwargs[class_number]
# isinstace(对比的数据, 目标类型) isinstance(1, str)
if not isinstance(name_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应该是字符串类型)
students = {
1: {
name: Neo,
age: 18,
class_number: A,
sex: boy
},
2: {
name: Jack,
age: 16,
class_number: B,
sex: boy
},
3: {
name: Lily,
age: 18,
class_number: A,
sex: girl
},
4: {
name: Adem,
age: 18,
class_number: C,
sex: boy
},
5: {
name: HanMeiMei,
age: 18,
class_number: B,
sex: girl
}
}
if __name__ == __main__:
student_info = StudentInfo(students)
user = student_info.get_by_id(1)
student_info.add(name=Marry, age=16, class_number=A, sex=girl)
users = [
{name: Atom, age: 17, class_number: B, sex: boy},
{name: Lucy, age: 18, class_number: C, sex: girl}
]
student_info.adds(users)
student_info.get_all_students()
print(------------------------------------------------------)
# >>> 执行结果如下:
# >>> 学号:1, 姓名:Neo, 年龄:18, 性别:boy, 班级:A
# >>> 学号:2, 姓名:Jack, 年龄:16, 性别:boy, 班级:B
# >>> 学号:3, 姓名:Lily, 年龄:18, 性别:girl, 班级:A
# >>> 学号:4, 姓名:Adem, 年龄:18, 性别:boy, 班级:C
# >>> 学号:5, 姓名:HanMeiMei, 年龄:18, 性别:girl, 班级:B
# >>> 学号:6, 姓名:Marry, 年龄:16, 性别:girl, 班级:A
# >>> 学号:7, 姓名:Atom, 年龄:17, 性别:boy, 班级:B
# >>> 学号:8, 姓名:Lucy, 年龄:18, 性别:girl, 班级:C
# >>> ------------------------------------------------------
student_info.deletes([7, 8])
student_info.get_all_students()
print(------------------------------------------------------)
# >>> 执行结果如下:
# >>> ------------------------------------------------------
# >>> 学号7 学生Atom 已被移除
# >>> 学号8 学生Lucy 已被移除
# >>> 学号:1, 姓名:Neo, 年龄:18, 性别:boy, 班级:A
# >>> 学号:2, 姓名:Jack, 年龄:16, 性别:boy, 班级:B
# >>> 学号:3, 姓名:Lily, 年龄:18, 性别:girl, 班级:A
# >>> 学号:4, 姓名:Adem, 年龄:18, 性别:boy, 班级:C
# >>> 学号:5, 姓名:HanMeiMei, 年龄:18, 性别:girl, 班级:B
# >>> 学号:6, 姓名:Marry, 年龄:16, 性别:girl, 班级:A
# >>> ------------------------------------------------------
student_info.updates([
{1: {name: Jone, age: 18, class_number: A, sex: boy}},
{2: {name: Nike, age: 18, class_number: A, sex: boy}}
])
student_info.get_all_students()
print(------------------------------------------------------)
# >>> 执行结果如下:
# >>> ------------------------------------------------------
# >>> 所有用户信息更新完成
# >>> 学号:1, 姓名:Jone, 年龄:18, 性别:boy, 班级:A
# >>> 学号:2, 姓名:Nike, 年龄:18, 性别:boy, 班级:A
# >>> 学号:3, 姓名:Lily, 年龄:18, 性别:girl, 班级:A
# >>> 学号:4, 姓名:Adem, 年龄:18, 性别:boy, 班级:C
# >>> 学号:5, 姓名:HanMeiMei, 年龄:18, 性别:girl, 班级:B
# >>> 学号:6, 姓名:Marry, 年龄:16, 性别:girl, 班级:A
# >>> ------------------------------------------------------
result = student_info.search_users(name=d)
print(result)
print(------------------------------------------------------)
# >>> 执行结果如下:
# >>> [{name: Adem, age: 18, class_number: C, sex: boy}]
result = student_info.search_users(name=小)
print(result)
print(------------------------------------------------------)
# >>> 执行结果如下:
# >>> ------------------------------------------------------
# >>> []
# >>> ------------------------------------------------------
result = student_info.search_users(name=)
print(result)
result = student_info.search_users(name=小)
print(result)
print(------------------------------------------------------)
# >>> 执行结果如下:
# >>> ------------------------------------------------------
# >>> [{name: Jone, age: 18, class_number: A, sex: boy}, {name: Nike, age: 18, class_number: A, sex: boy}, {name: Lily, age: 18, class_number: A, sex: girl}, {name: Adem, age: 18, class_number: C, sex: boy}, {name: HanMeiMei, age: 18, class_number: B, sex: girl}, {name: Marry, age: 16, class_number: A, sex: girl}]
# >>> []
result = student_info.search_users(name=)
print(result)
以上就是Python学习之异常断言详解的详细内容,更多关于Python异常断言的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。