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标准库之多进程(multiprocessing包)介绍
Nov 25 Python
关于Python元祖,列表,字典,集合的比较
Jan 06 Python
python使用arcpy.mapping模块批量出图
Mar 06 Python
python使用pandas实现数据分割实例代码
Jan 25 Python
Django中url的反向查询的方法
Mar 14 Python
Python-while 计算100以内奇数和的方法
Jun 11 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
python 实现单通道转3通道
Dec 03 Python
PyCharm无法引用自身项目解决方式
Feb 12 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
Python importlib动态导入模块实现代码
Apr 16 Python
matplotlib绘制正余弦曲线图的实现
Feb 22 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
PHP句法规则详解 入门学习
2011/11/09 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
jQuery学习心得总结(必看篇)
2016/06/10 Javascript
微信小程序 教程之条件渲染
2016/10/18 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
vue中配置mint-ui报css错误问题的解决方法
2017/10/11 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
LA MER海蓝之谜美国官网:传奇面霜
2016/08/27 全球购物
ET Mall东森购物网:东森严选
2017/03/06 全球购物
德国电子商城:ComputerUniverse
2017/04/21 全球购物
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
会计电算化专业个人的自我评价
2013/11/24 职场文书
市场营销管理制度
2014/01/29 职场文书
中介业务员岗位职责
2014/04/09 职场文书
股份合作协议书
2014/09/10 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
借钱欠条怎么写
2015/07/03 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL
Python机器学习三大件之一numpy
2021/05/10 Python
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js
pycharm无法安装cv2模块问题
2022/05/20 Python