一、 是什么
它是一种调试语句, 这种调试语句可以在程序运行的时候做一次自检。
对某一个表达式开展验证工作, 以确认其呈现的状态是否为真(True)。
它的功能等同于一个自动化的检测站点。
如果条件为 True, 那么程序会接着往下执行。
假设条件是等于否定的真, 那我们就把异常给抛出去, 这个异常里面是可以带着一些关于那个错误的提示信息的。
二、这是关于基础语法方面的内容。
assert 条件表达式, 可选的错误提示信息等价于:
if not 条件表达式:raise AssertionError(错误提示信息)
三、用法示例的演示部分是第一个例子, 也就是最基本的那种使用方式。
x = 10assert x > 0
print("x 是正数")
输出:
x 是正数在条件 x > 0 被判定为成立之后, 程序便得以顺延继续执行接下来的操作步骤。
示例 2:条件不成立时
x = -1assert 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这个数值, 系统就会马上抛出异常信息, 以此来阻止可能出现运行时错误这种糟糕情况的发生。
四、在那些经常用到的场景里, 会有对应的示例来作为说明。
参数校验
(x, int)
必须确保输入的函数其类型是正确的, 这样才算没问题。
环境检查
使用os.path的(/data)。
我们来检查一下, 那个所依赖的目录, 究竟是否存在。
版本检测
() >= ('19.03')
检查系统组件版本
配置检测
> 0
校验配置文件参数合法性
五、有一个特别关键的点需要大家予以关注与重视, 那就是断言这个功能本身, 它在日常当中的主要应用场景是集中在软件开发的环节以及调试的过程里头的,而我们是不太倡导把这种操作手段往正式的业务逻辑判断里面去进行广泛使用的。
之所以可以在运行时, 通过执行命令来完成相关的操作。
python -O script.py把加上那个由一个短横线和大写字母O组成并且在后面带有左括号和右括号的参数之后, 那么所有的语句就会都被给忽略掉了!
因此, 在生产环境的代码编写过程中, 业界建议采用结合条件判断语句并抛出异常的处理方式, 或者利用专门的异常处理机制来取代表面看起来更简洁但实际存在隐患的断言操作:
if not condition:raise ValueError("错误信息")
六、在实际的运维或者是工程实践里面, 有一个具体的应用举例, 这个例子就是版本检测。
from packaging.version import Versionfrom 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 非法"
七、对项目的具体说明内容进行一番总结。
关键词
作用
在运行的时候来检查一下这个表达式, 看它到底是不是真的。
为假时
抛出
异常
适用场景
在调试和自检的过程中, 在进行开发时要能够快速地进行假设验证。
注意事项
在发布生产环境的代码的时候, 这个功能是可以被关闭的, 所以它不可以用来做核心的逻辑判断。