Python 语法精炼16
断言
断言(assertion) 是一种 自我检查机制,用于判断程序运行时某个条件是否为真。
当条件为假时,程序会抛出异常(AssertionError)并终止执行,以提示你“程序状态不符合预期”。
简单说:
“我确信这里必须是 True,否则说明有 bug。”
语法结构
1 | assert 条件, 错误提示(可选) |
📘 举例:
1 | x = 10 |
✅ 输出:
1 | 继续执行... |
❌ 若条件不成立:
1 | x = -5 |
报错:
1 | AssertionError: x 必须是正数 |
执行原理
assert 的本质相当于:
1 | if not 条件: |
也就是说,断言会在条件为 False 时自动抛出异常。
例如:
1 | # 以下两者等价 |
典型用途
检查函数输入参数是否合法
1 | def divide(a, b): |
检查数据处理中的中间结果
1 | data = [1, 2, 3] |
验证算法假设或逻辑不变量
在算法或状态机中,断言用于确保某些逻辑在运行中永远成立:
1 | def move_player(x, y): |
单元测试中快速验证
在轻量级测试脚本中,断言可以替代测试框架:
1 | def test_sum(): |
运行时若一切正常,不输出任何信息;否则报错提示问题所在。
与异常的关系
| 区别点 | assert |
raise |
|---|---|---|
| 目的 | 调试时验证假设 | 主动抛出异常 |
| 抛出异常类型 | AssertionError |
任意类型(如 ValueError, TypeError) |
| 常用于 | 开发阶段的内部检查 | 逻辑错误或用户输入错误 |
| 可禁用 | ✅ 可被优化关闭 | ❌ 永远生效 |
关闭机制
Python 在优化模式(使用命令行参数 -O)运行时,会自动移除所有 assert 语句!
例如:
1 | python -O my_script.py |
此时程序中的所有断言不会执行,相当于全部被删掉。
👉 因此:
- 断言不能用于程序的业务逻辑检查,例如输入验证或权限校验。
- 它只适合开发与调试阶段的内部逻辑验证。
最佳实践
✅ 推荐
- 用来检测你认为“不可能出错”的条件;
- 用来验证内部逻辑一致性;
- 用来在开发时快速定位 bug。
❌ 避免
- 不要用于业务逻辑错误检测;
- 不要用于外部输入校验;
- 不要用于替代异常处理机制。
进阶示例
多条件断言
1 | def process_user(age, name): |
调试复杂逻辑
1 | def compute(a, b): |
与 try-except 搭配
1 | try: |
输出:
1 | 断言失败: 数学炸了 |
总结表格
| 要点 | 内容 |
|---|---|
| 关键字 | assert 条件, "错误信息" |
| 本质 | 条件不满足 → 抛出 AssertionError |
| 场景 | 调试、验证逻辑、测试 |
| 禁用 | 运行时使用 python -O |
| 不适合 | 用户输入验证、生产逻辑判断 |
| 等价语句 | if not 条件: raise AssertionError(...) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Telason!
