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之Socket网络编程详解
Sep 29 Python
详解Python多线程Selenium跨浏览器测试
Apr 01 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
Dec 19 Python
python使用pandas抽样训练数据中某个类别实例
Feb 28 Python
Python Excel vlookup函数实现过程解析
Jun 22 Python
Python3爬虫中关于中文分词的详解
Jul 29 Python
python日志通过不同的等级打印不同的颜色(示例代码)
Jan 13 Python
Python实现京东抢秒杀功能
Jan 25 Python
tensorboard 可视化之localhost:6006不显示的解决方案
May 22 Python
python 标准库原理与用法详解之os.path篇
Oct 24 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 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 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
php实现文件预览功能
2017/05/23 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
jQuery的实现原理的模拟代码 -2 数据部分
2010/08/01 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
Python实现子类调用父类的方法
2014/11/10 Python
Python中方法链的使用方法
2016/02/23 Python
Python实现多线程的两种方式分析
2018/08/29 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
法院授权委托书格式
2014/09/28 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
目标责任书格式范文
2015/05/11 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js
javascript的var与let,const之间的区别详解
2022/02/18 Javascript