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之PyUnit单元测试实例
Oct 11 Python
Python文件操作基本流程代码实例
Dec 11 Python
Python使用matplotlib实现绘制自定义图形功能示例
Jan 18 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
Django实现学生管理系统
Feb 26 Python
django 捕获异常和日志系统过程详解
Jul 18 Python
详解numpy.meshgrid()方法使用
Aug 01 Python
Python英文文章词频统计(14份剑桥真题词频统计)
Oct 13 Python
Python 使用 environs 库定义环境变量的方法
Feb 25 Python
Python如何省略括号方法详解
Mar 21 Python
vscode调试django项目的方法
Aug 06 Python
python实现经典排序算法的示例代码
Feb 07 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
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
也谈 PHP 和 MYSQL
2006/10/09 PHP
转PHP手册及PHP编程标准
2006/12/17 PHP
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
php截取视频指定帧为图片
2016/05/16 PHP
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
jquery css 设置table的奇偶行背景色示例
2014/06/03 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
Avalonjs 实现简单购物车功能(实例代码)
2017/02/07 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
Django单元测试工具test client使用详解
2019/08/02 Python
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
HTML5 新事件 小结
2009/07/16 HTML / CSS
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
AmazeUI 按钮交互的实现示例
2020/08/24 HTML / CSS
html5 拖拽及用 js 实现拖拽功能的示例代码
2020/10/23 HTML / CSS
学校司机岗位职责
2013/11/14 职场文书
入党自我鉴定
2014/03/25 职场文书
元旦寄语大全
2014/04/10 职场文书
《1942》观后感
2015/06/08 职场文书
基层工作经历证明
2015/06/19 职场文书
小学运动会宣传稿
2015/07/23 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
关于感恩的作文
2019/08/26 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
go语言求任意类型切片的长度操作
2021/04/26 Golang