我一直在阅读一些源代码,在几个地方我看到了assert的用法.

这到底是什么意思?它有什么用途?

推荐答案

assert语句几乎存在于每种编程语言中.它有两个主要用途:

  1. 它有助于在程序的早期发现问题,原因很清楚,而不是在其他操作失败之后.例如,Python中的一个类型错误可能会经过几层代码,如果不在早期发现的话,实际上会提高Exception.

  2. 它可以作为阅读代码的其他开发人员的文档,这些开发人员看到了assert,并且可以自信地说,从现在起,它的条件仍然有效.

当你这么做的时候...

assert condition

... 您告诉程序测试该条件,如果条件为假,则立即触发错误.

在Python中,它大致相当于:

if not condition:
    raise AssertionError()

在Python shell中try 一下:

>>> assert True # nothing happens
>>> assert False
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

断言可以包含一条可选消息,您可以在运行解释器时禁用它们.

要在断言失败时打印消息,请执行以下操作:

assert False, "Oh no! This assertion failed!"

not是否像函数一样使用括号调用assert.这是一份声明.如果使用assert(condition, message),您将以(condition, message)元组作为第一个参数运行assert.

至于禁用它们,当在优化模式下运行python时,__debug__False,断言语句将被忽略.只需越过-O旗:

python -O script.py

有关文档,请参见here.

Python相关问答推荐

如何在超时的情况下同步运行Matplolib服务器端?该过程随机挂起

Chatgpt API不断返回错误:404未能从API获取响应

Python 3.12中的通用[T]类方法隐式类型检索

如果条件为真,则Groupby.mean()

我从带有langchain的mongoDB中的vector serch获得一个空数组

删除最后一个pip安装的包

如何让程序打印新段落上的每一行?

如何过滤包含2个指定子字符串的收件箱列名?

在Mac上安装ipython

我如何根据前一个连续数字改变一串数字?

SQLAlchemy bindparam在mssql上失败(但在mysql上工作)

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

用渐近模计算含符号的矩阵乘法

在嵌套span下的span中擦除信息

网格基于1.Y轴与2.x轴显示在matplotlib中

在输入行运行时停止代码

polars:有效的方法来应用函数过滤列的字符串

使用__json__的 pyramid 在客户端返回意外格式

pandas:在操作pandora之后将pandora列转换为int

根据客户端是否正在传输响应来更改基于Flask的API的行为