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求斐波那契数列示例分享
Feb 14 Python
Python写的英文字符大小写转换代码示例
Mar 06 Python
Python实现的十进制小数与二进制小数相互转换功能
Oct 12 Python
使用python编写监听端
Apr 12 Python
利用Django模版生成树状结构实例代码
May 19 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
Jul 06 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
Oct 25 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
Apr 20 Python
Python基于Tkinter编写crc校验工具
May 06 Python
python re模块常见用法例举
Mar 01 Python
浅谈Python项目的服务器部署
Apr 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
Python-基础-入门 简介
2014/08/09 Python
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
Django发送html邮件的方法
2015/05/26 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
python中remove函数的踩坑记录
2021/01/04 Python
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
文秘专业大学生求职信
2013/11/10 职场文书
大学生个人自我鉴定
2013/12/03 职场文书
小区停车场管理制度
2014/01/27 职场文书
写给女朋友的检讨书
2014/01/28 职场文书
主管竞聘书范文
2014/03/31 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
2014年团总支工作总结
2014/11/21 职场文书
个人委托书范文
2015/01/28 职场文书
2015年电工工作总结
2015/04/10 职场文书
工地食品安全责任书
2015/05/09 职场文书
2016春季运动会前导词
2015/11/25 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
导游词之清晏园
2019/11/22 职场文书
解决numpy数组互换两行及赋值的问题
2021/04/17 Python
vue首次渲染全过程
2021/04/21 Vue.js