python 断言详细讲解用法及其案例,python中断言的用法

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: