当前位置: 首页 > news >正文

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 / 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 校验配置文件参数合法性

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

  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_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
异常
适用场景 调试、自检、开发时快速验证假设
注意事项 发布生产代码时可被禁用,不应用于核心逻辑判断
http://www.gsyq.cn/news/21481.html

相关文章:

  • 1688代发铺货规格匹配设置
  • task2
  • 2025年机械加工厂家最新权威推荐榜:钣金/焊接/零件/非标自动化/精密金属加工,专业定制与技术创新实力解析
  • 2025年10月15号随笔
  • Ubuntu20.04安装NVIDIA显卡驱动、CUDA Toolkit、cuDNN步骤(二) - 指南
  • 2025年冲压件厂家最新权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件源头厂商深度解析
  • 微信群机器人接口
  • logging模块用法
  • 详细介绍:MQTT数据集成
  • 深入解析:WordPress提速指南:Memcached+Super Static Cache+CDN缓存网站内容
  • 实用指南:WordPress提速指南:Memcached+Super Static Cache+CDN缓存网站内容
  • AI元人文中价值原语博弈系统的理论建构与实践意义探析
  • LGP3201 [HNOI 2009] 梦幻布丁 学习笔记
  • 2025年石头纸设备/吹塑机厂家最新权威推荐榜:环保石头纸、碳酸钙石头纸、固废石头纸及挤出吹塑机、注射吹塑机、半导体清洗液瓶子吹塑机专业选购指南
  • AI技术新突破:图像编辑与浏览器智能体
  • PWN手的成长之路-16-OGeek2019-babyrop
  • 2025年掘进机厂家最新权威推荐榜:隧道掘进机、煤矿掘进机、岩石掘进机、盾构掘进机,专业实力与高效施工口碑之选
  • 2025年冷却塔厂家最新权威推荐榜单:工业冷却塔、闭式冷却塔、横流式冷却塔、逆流式冷却塔专业制造商精选
  • 2025年重庆短视频信息流投流/获客/巨量广告投放/拍摄/代运营推广公司推荐榜区域精选公司分享
  • 俄罗斯合作伙伴 Mobx,用 NocoBase 交付多场景方案
  • 2025年法兰罩厂家最新权威推荐榜:专业防护与精密制造,工业管道安全守护首选品牌
  • 2025年数控滚齿机厂家最新权威推荐榜:高精度齿轮加工设备源头供应商,实力与口碑双重保障
  • 2025 年蜂巢土工格室厂家推荐榜:HDPE土工格室/PP土工格室/PET土工格室/聚焦工程适配与品质保障,优选山东大成工程材料有限公司
  • JVM调优 的大厂案例: 凌晨零点,一个 TODO,差点把我们整个部门抬走
  • 2025年氧化镁厂家最新推荐排行榜,高纯氧化镁,活性氧化镁,医药级氧化镁,工业级氧化镁公司推荐
  • C 语言 - struct 关键字解析
  • 从0到1 精通 5大 GC日志:5万字 GC日志圣经,大厂看GC日志的10字口诀,再不用看不懂GC日志了
  • 深入解析:技术演进中的开发沉思-118Linux命令篇:系统管理命令(下)
  • 京东面试:什么是 JIT,JIT什么优势?什么是 类的生命周期七个阶段 ?什么是 字节码增强?
  • 10亿用户微博Feed流,如何 抵抗 100WQPS 热点 ?如何 抵抗雪崩 ?