一、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 / bprint(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 |
校验配置文件参数合法性 |
五、注意事项(非常重要)
- 断言主要用于开发与调试阶段,不推荐用于正式业务逻辑判断。
因为 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_envclient = 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 异常 |
适用场景 | 调试、自检、开发时快速验证假设 |
注意事项 | 发布生产代码时可被禁用,不应用于核心逻辑判断 |