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 中 list 的各项操作技巧
Apr 13 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
Jun 15 Python
微信跳一跳辅助python代码实现
Jan 05 Python
pandas 对每一列数据进行标准化的方法
Jun 09 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
python 批量解压压缩文件的实例代码
Jun 27 Python
利用python list完成最简单的DB连接池方法
Aug 09 Python
Java ExcutorService优雅关闭方式解析
May 30 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
keras实现theano和tensorflow训练的模型相互转换
Jun 19 Python
虚拟环境及venv和virtualenv的区别说明
Feb 05 Python
判断Python中的Nonetype类型
May 25 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
yii框架源码分析之创建controller代码
2011/06/28 PHP
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
PHP加密技术的简单实现
2016/09/04 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
详解Python的Django框架中的中间件
2015/07/24 Python
Python多层装饰器用法实例分析
2018/02/09 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
日语翻译个人求职的自我评价
2013/10/14 职场文书
教师个人自我鉴定
2014/02/08 职场文书
一帮一活动总结
2014/05/08 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2014年学校工作总结
2014/11/20 职场文书
给客户的感谢信
2015/01/21 职场文书
教师节感谢信
2015/01/22 职场文书
满月酒邀请函
2015/01/30 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python