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基础教程之类class定义使用方法
Feb 20 Python
浅析python 中__name__ = '__main__' 的作用
Jul 05 Python
python使用多线程不断刷新网页的方法
Mar 31 Python
详解Python中with语句的用法
Apr 15 Python
浅谈Django学习migrate和makemigrations的差别
Jan 18 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
Python中IP地址处理IPy模块的方法
Aug 16 Python
python2.7实现复制大量文件及文件夹资料
Aug 31 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 Python
python基于opencv 实现图像时钟
Jan 04 Python
基于注解实现 SpringBoot 接口防刷的方法
Mar 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
PHP开发大型项目的一点经验
2006/10/09 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
javascript 计算两个整数的百分比值
2009/12/26 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
基于jquery步骤进度条源码分享
2015/11/12 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
Python splitlines使用技巧
2008/09/06 Python
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
tensorflow实现对图片的读取的示例代码
2018/02/12 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
python 获取谷歌浏览器保存的密码
2021/01/06 Python
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
JAVA代码查错题
2014/10/10 面试题
幼儿教师师德承诺书
2014/05/23 职场文书
甜品店创业计划书
2014/08/14 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL
pandas中关于apply+lambda的应用
2022/02/28 Python