Python assert断言机制与常用测试函数详解

阿麦
阿麦
发布时间:2026-10-14| 5人浏览过
原创

本文详解Python中assert断言语句的语法、执行流程及在程序调试中的应用场景,重点介绍unittest模块中assertEqual、assertTrue等常用断言函数的使用方法与适用时机,帮助开发者提升代码健壮性与测试效率。

Python assert断言基础与执行流程

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),其中expr为输入的表达式,若表达式为真则通过;msg为可选参数。assertFalse的逻辑相反,即表达式为假时通过。
  • assertIsNone和assertIsNotNone
  • assertIsNone:若对象不存在(为None),则测试通过(pass)
  • assertIsNotNone:若对象存在,则测试通过(pass)

使用方法:

assertIsNone(obj,msg),用于检查某个元素是否为None。

总结:

常用

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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。