assert的基本用法

一、assert 是什么

assert 是 Python 提供的一种 调试语句,用于在程序运行时做“自检”,
验证一个表达式是否为真(True)。

它的作用就像一个 自动检测点(checkpoint)

如果条件为 True → 程序继续执行
如果条件为 False → 抛出 AssertionError 异常(可带错误提示信息)


二、基本语法

assert 条件表达式, 可选的错误提示信息

等价于:

if not 条件表达式:
    raise AssertionError(错误提示信息)

三、用法示例

✅ 示例 1:最基本用法

x = 10
assert x > 0
print("x 是正数")

输出:

x 是正数

因为条件 x > 0 成立,程序继续执行。


❌ 示例 2:条件不成立时

x = -1
assert x > 0, "x 必须是正数"
print("不会执行到这里")

输出:

Traceback (most recent call last):
  ...
AssertionError: x 必须是正数

程序直接中断。


✅ 示例 3:结合函数使用

def divide(a, b):
    assert b != 0, "除数不能为0"
    return a / b

print(divide(10, 2))   # ✅ 正常
print(divide(10, 0))   # ❌ 报错

当除数为 0 时,assert 会立刻抛出异常,防止运行时错误。


四、常见使用场景

场景 示例 说明
✅ 参数校验 assert isinstance(x, int) 确保函数输入类型正确
✅ 环境检查 assert os.path.exists('/data') 检查依赖目录是否存在
✅ 版本检测 assert Version(docker_version) >= Version('19.03') 检查系统组件版本
✅ 配置检测 assert config['port'] > 0 校验配置文件参数合法性

五、注意事项(非常重要)

  1. 断言主要用于开发与调试阶段,不推荐用于正式业务逻辑判断。

因为 Python 在运行时可使用命令:

python -O script.py

加上 -O(optimize)参数后,所有 assert 语句会被 忽略

所以生产代码中建议用 if + raise 或异常处理代替断言:

if not condition:
    raise ValueError("错误信息")

六、实际运维/工程中的应用举例

示例:Docker 版本检测

from packaging.version import Version
from docker import from_env

client = from_env()
docker_version = client.version()['Components'][0]['Version']

assert Version(docker_version) >= Version('19.03'), "需要 Docker 19.03 或更高版本"

示例:配置检查

config = {"port": 8080, "host": "127.0.0.1"}
assert "port" in config and config["port"] > 0, "配置文件缺少 port 或 port 非法"

七、总结

项目 说明
关键词 assert
作用 在运行时检查表达式是否为真
为假时 抛出AssertionError
异常
适用场景 调试、自检、开发时快速验证假设
注意事项 发布生产代码时可被禁用,不应用于核心逻辑判断
posted @ 2025-10-15 13:17  梁永旺  阅读(105)  评论(0)    收藏  举报