Python常用断言函数实例汇总


Posted in Python onNovember 30, 2020

Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行;反之,Python 解释器会报 AssertionError 错误。

assert 语句的语法结构为:

assert 表达式

assert 语句的执行流程可以用 if 判断语句表示(等效),如下所示:

if 表达式==True:
程序继续执行
else:
程序报 AssertionError 错误

有读者可能会问,明明 assert 会令程序崩溃,为什么还要使用它呢?这是因为,与其让程序在晚些时候崩溃,不如在错误条件出现时,就直接让程序崩溃,这有利于我们对程序排错,提高程序的健壮性。
因此,assert 语句通常用于检查用户的输入是否符合规定,还经常用作程序初期测试和调试过程中的辅助工具。
下面的程序演示了 assert 语句的用法:

mathmark = int(input())
#断言数学考试分数是否位于正常范围内
assert 0 <= mathmark <= 100
#只有当 mathmark 位于 [0,100]范围内,程序才会继续执行
print("数学考试分数为:",mathmark)

运行该程序,测试数据如下:

90

数学考试分数为: 90

再次执行该程序,测试数据为:

159

Traceback (most recent call last):
File "C:\Users\mengma\Desktop\file.py", line 3, in <module>
assert 0 <= mathmark <= 100
AssertionError

可以看到,当 assert 语句后的表达式值为真时,程序继续执行;反之,程序停止执行,并报 AssertionError 错误。

常用断言函数
常用

这里介绍几个常用断言的使用方法,可以一定程度上帮助大家对预期结果进行判断。-

  • assertEqual
  • assertNotEqual
  • assertTrue
  • assertFalse
  • assertIsNone
  • assertIsNotNone
  • assertEqual 和 assertNotEqual
  • assertEqual:如两个值相等,则pass
  • assertNotEqual:如两个值不相等,则pass

使用方法:

assertEqual(first,second,msg)其中first与second进行比较,如果相等则通过;msg为失败时打印的信息,选填;断言assertNotEqual反着用就可以了。

  • assertTrue和assertFalse
  • assertTrue:判断bool值为True,则pass
  • assertFalse:判断bool值为False,则Pass

使用方法:

  • assertTrue(expr,msg)其中express输入相应表达式,如果表达式为真,则pass;msg选填;断言assertFalse如果表达式为假,则pass
  • assertIsNone和assertIsNotNone
  • assertIsNone:不存在,则pass
  • assertIsNotNone:存在,则pass

使用方法:

assertIsNone(obj,msg)检查某个元素是否存在

总结:

常用

assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b 2.7
assertIsNot(a, b) a is not b 2.7
assertIsNone(x) x is None 2.7
assertIsNotNone(x) x is not None 2.7
assertIn(a, b) a in b 2.7
assertNotIn(a, b) a not in b 2.7
assertIsInstance(a, b) isinstance(a, b) 2.7
assertNotIsInstance(a, b) not isinstance(a, b) 2.7

其它

assertAlmostEqual(a, b) round(a-b, 7) == 0
assertNotAlmostEqual(a, b) round(a-b, 7) != 0
assertGreater(a, b) a > b 2.7
assertGreaterEqual(a, b) a >= b 2.7
assertLess(a, b) a < b 2.7
assertLessEqual(a, b) a <= b 2.7
assertRegexpMatches(s, re) regex.search(s) 2.7
assertNotRegexpMatches(s, re) not regex.search(s) 2.7
assertItemsEqual(a, b) sorted(a) == sorted(b) and works with unhashable objs 2.7
assertDictContainsSubset(a, b) all the key/value pairs in a exist in b 2.7
assertMultiLineEqual(a, b) strings 2.7
assertSequenceEqual(a, b) sequences 2.7
assertListEqual(a, b) lists 2.7
assertTupleEqual(a, b) tuples 2.7
assertSetEqual(a, b) sets or frozensets 2.7
assertDictEqual(a, b) dicts 2.7
assertMultiLineEqual(a, b) strings 2.7
assertSequenceEqual(a, b) sequences 2.7
assertListEqual(a, b) lists 2.7
assertTupleEqual(a, b) tuples 2.7
assertSetEqual(a, b) sets or frozensets 2.7assertDictEqual(a, b) dicts 2.7

使用时机:

那么我们什么时候应该使用断言呢?如果没有特别的目的,断言应该用于如下情况:

  • 防御性的编程
  • 运行时对程序逻辑的检测
  • 合约性检查(比如前置条件,后置条件)
  • 程序中的常量
  • 检查文档
  • 例:防御性编程中添加断言

在代码开始添加注释是个好的开端,但是人们都不太喜欢读和更新这些注释,这些注释会很快变得过时。但对于断言,我们可以同时对这块代码编写文档,如果这些断言被违反了,会直接引起一个简单而又直接的失败。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python任务调度实例分析
May 19 Python
Python对文件操作知识汇总
May 15 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
May 08 Python
Python实现调度算法代码详解
Dec 01 Python
运动检测ViBe算法python实现代码
Jan 09 Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 Python
python筛选出两个文件中重复行的方法
May 31 Python
python如何生成网页验证码
Jul 28 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
Python list与NumPy array 区分详解
Nov 06 Python
Python实现井字棋小游戏
Mar 09 Python
python 爬虫网页登陆的简单实现
Nov 30 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
Nov 30 #Python
Django 用户认证Auth组件的使用
Nov 30 #Python
python tqdm库的使用
Nov 30 #Python
Python+unittest+DDT实现数据驱动测试
Nov 30 #Python
Python logging自定义字段输出及打印颜色
Nov 30 #Python
详解Python中string模块除去Str还剩下什么
Nov 30 #Python
使用django自带的user做外键的方法
Nov 30 #Python
You might like
SMARTY学习手记
2007/01/04 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
用PHP代码给图片加水印
2015/07/01 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
vue-star评星组件开发实例
2018/03/01 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
Vue-router 中hash模式和history模式的区别
2018/07/24 Javascript
通过实践编写优雅的JavaScript代码
2019/05/30 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
详解用python实现简单的遗传算法
2018/01/02 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
python实现简易动态时钟
2018/11/19 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
总裁办公室主任职责
2014/01/02 职场文书
小学生新学期寄语
2014/01/19 职场文书
留学推荐信怎么写
2014/01/25 职场文书
大学生作弊检讨书
2014/02/19 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书
Python 发送SMTP邮件的简单教程
2021/06/24 Python
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技