Python常用断言函数实例汇总

作者:-零 时间:2023-07-04 18:15:23 

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

使用时机:

那么我们什么时候应该使用断言呢?如果没有特别的目的,断言应该用于如下情况:

  • 防御性的编程

  • 运行时对程序逻辑的检测

  • 合约性检查(比如前置条件,后置条件)

  • 程序中的常量

  • 检查文档

  • 例:防御性编程中添加断言

在代码开始添加注释是个好的开端,但是人们都不太喜欢读和更新这些注释,这些注释会很快变得过时。但对于断言,我们可以同时对这块代码编写文档,如果这些断言被违反了,会直接引起一个简单而又直接的失败。

来源:https://www.cnblogs.com/-wenli/p/13398130.html

标签:Python,断言,函数
0
投稿

猜你喜欢

  • python数值基础知识浅析

    2021-12-10 07:07:49
  • numpy中nan_to_num的具体使用

    2021-10-31 13:04:55
  • Python处理文本数据的方法详解

    2023-08-18 01:57:30
  • MySQL中登录与退出超全图文讲解

    2024-01-19 20:24:43
  • Python边缘检测之prewitt,sobel和laplace算子详解

    2023-09-30 06:01:56
  • Python大批量搜索引擎图像爬虫工具详解

    2021-09-15 15:30:02
  • Python PyQt5-图形界面的美化操作

    2023-11-08 23:04:34
  • Bootstrap Table 删除和批量删除

    2024-05-25 15:17:21
  • python连接sql server乱码的解决方法

    2023-06-27 07:25:17
  • python celery分布式任务队列的使用详解

    2021-04-22 18:17:56
  • python中的txt文件转换为XML

    2021-12-05 10:45:48
  • Python之Pygame的Event事件模块

    2021-07-17 06:18:40
  • uniqueidentifier转换成varchar数据类型的sql语句

    2011-09-30 11:17:48
  • Python进阶学习之特殊方法实例详析

    2022-03-03 22:15:04
  • ASP写的汉字转换为UTF-8的一段代码

    2009-07-05 18:49:00
  • Python实现京东抢秒杀功能

    2021-12-06 04:50:17
  • [ASP]提高数据显示效率--缓存探幽

    2008-05-18 13:51:00
  • 实例详解Python装饰器与闭包

    2021-05-27 10:12:21
  • Mysql数据库中的redo log 写入策略和binlog 写入策略

    2024-01-27 08:21:14
  • Python数值方法及数据可视化

    2021-07-26 17:32:51
  • asp之家 网络编程 m.aspxhome.com