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 opencv示例
Jan 30 Python
Python获取Redis所有Key以及内容的方法
Feb 19 Python
修改Pandas的行或列的名字(重命名)
Dec 18 Python
Tensorflow 多线程设置方式
Feb 06 Python
Python批量启动多线程代码实例
Feb 18 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
Python tkinter 下拉日历控件代码
Mar 04 Python
Python如何存储数据到json文件
Mar 09 Python
python画环形图的方法
Mar 25 Python
python安装第三方库如xlrd的方法
Oct 31 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 Python
总结三种用 Python 作为小程序后端的方式
May 02 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
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
php HandlerSocket的使用
2011/05/02 PHP
Java中final关键字详解
2015/08/10 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
js实现图片轮播效果
2015/12/19 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
vue异步加载高德地图的实现
2018/06/19 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
JavaScript十大取整方法实例教程
2020/12/03 Javascript
深入理解python try异常处理机制
2016/06/01 Python
Python迭代和迭代器详解
2016/11/10 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
详解Python3定时器任务代码
2019/09/23 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
python 字典套字典或列表的示例
2019/12/16 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
如何唤起类中的一个方法
2013/11/29 面试题
2015年度招聘工作总结
2015/05/28 职场文书
环保建议书作文400字
2015/09/14 职场文书
导游词之天津古文化街
2019/11/09 职场文书