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发送邮件的实例代码(支持html、图片、附件)
Mar 04 Python
python数据结构树和二叉树简介
Apr 29 Python
python计算牛顿迭代多项式实例分析
May 07 Python
基于sklearn实现Bagging算法(python)
Jul 11 Python
对python中的装包与解包实例详解
Aug 24 Python
Python中turtle库的使用实例
Sep 09 Python
python实现根据文件格式分类
Oct 31 Python
Python帮你识破双11的套路
Nov 11 Python
使用Python实现牛顿法求极值
Feb 10 Python
Python爬虫工具requests-html使用解析
Apr 29 Python
Python带你从浅入深探究Tuple(基础篇)
May 15 Python
OpenCV-Python直方图均衡化实现图像去雾
Jun 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
PHP 七大优势分析
2009/06/23 PHP
php下关于中英数字混排的字符串分割问题
2010/04/06 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
php除数取整示例
2014/04/24 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
js 单引号 传递方法
2009/06/22 Javascript
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
Django小白教程之Django用户注册与登录
2016/04/22 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
通过实例了解python property属性
2019/11/01 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
小溪流的歌教学反思
2014/02/13 职场文书
专项法律服务方案
2014/06/11 职场文书
上班迟到检讨书
2015/05/06 职场文书
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle