DDR Asked: 2020-04-28 07:26:15 +0800 CST 2020-04-28 07:26:15 +0800 CST 2020-04-28 07:26:15 +0800 CST 断言函数有什么作用? 772 我在一些程序和网络上看到他们使用assert函数,例如: Assert True 什么都不做,同时: Assert False 发送一个 AssertationError... 我仍然不清楚这个功能的用途。 有任何想法吗 ? 谢谢! python 2 Answers Voted Best Answer abulafia 2020-04-28T08:01:49+08:002020-04-28T08:01:49+08:00 它的作用已经在其他答案中进行了解释。我将进一步扩展它的用途。它有两个主要用途。 检测编程错误 第一个是在你的程序中包含一种防止可能的程序员错误的“安全网”。想象一下,您调用了一个您知道永远不会返回负值的函数,并且您将其响应用作另一个操作的一部分: a = otra_funcion() return 1 + a 我坚持,otra_funcion()永远不会返回负数。如果是这样,那就错了。但是您并不完全信任它,因为可能该函数不是您编写的,并且可能在包含它的库的稍后更新中,出现错误并返回负数。assert允许您表达一个必须始终为真的条件,否则程序将被中断。我们可以这样添加assert: a = otra_funcion() assert a >= 0 # Asegurarse de que es positivo return a + 1 虽然它a确实是积极的,但好像我们没有添加assert,因为它什么都不做。但如果它曾经是负面的,我们会很平静,因为它assert会中断程序并转储一个跟踪,指示程序中它assert失败的点。 我们可以包含一条消息,该消息将成为表达式为假时引发的异常的一部分。所以: a = otra_funcion() assert a >= 0, "otra_funcion() ha retornado un negativo!" return a + 1 如果发生异常,此消息将成为错误的一部分,并将帮助我们追踪问题。 一个重要的细节是assert应该用于捕获不应该发生的条件,如果它们确实发生,则应将其视为编程错误。另一方面,如果该函数可能返回负数,但在我的特定应用程序中它对我不起作用并且我想将其视为错误,则正常的做法是使用 aif来验证它,并在必要时,生成更合适的异常。例如: a = otra_funcion() if a<0: raise ValueError("El resultado negativo no es válido aquí") return 1 + a 测试 当您编写单元测试时(包括调用一个函数,其结果您已经提前知道它应该是什么,但您正在检查它是否实际返回您所期望的),assert用于验证该值是否是预期的. 例如,假设您编写了一个名为的函数raiz_cuadrada()并想检查它是否工作正常。你可以写一些这样的测试: resultado = raiz_cuadrada(25) assert resultado == 5.0 resultado = raiz_cuadrada(0) assert resultado == 0.0 通常会有更多的测试,但要得到这个想法就足够了。 当您从测试自动化环境运行这些测试时,该环境会捕获AssertionError发生的那些测试,以便最终它可以向您报告有多少测试失败(以及哪些测试失败),以便您可以查看失败的功能不符合你的预期 测试在开发过程中非常重要,因为如果您修改函数raiz_cuadrada()以修复它所具有的错误,您需要确保这样做没有引入另一个错误。拥有一组良好的测试并且在修改代码后它们都继续通过是必不可少的。 RodriKing 2020-04-28T07:37:58+08:002020-04-28T07:37:58+08:00 assert 是一个 Python 语句,允许您定义必须始终满足的条件。如果布尔表达式为 True,则断言什么也不做,如果为 False,则抛出异常。 >>> assert 5 == 5 >>> assert 6 < 2 Traceback (most recent call last): File "<stdin>", line 1, in ? AssertionError >>> 它们可以用作方法、函数、代码块中的前置条件和后置条件,但最重要的是指定不变量。它比编写 if 语句更短,对读者来说更清晰,并且作为奖励,如果使用 -O 调用解释器,则不会执行该语句。 那么什么时候做: Assert False 抛出一个可以在try/except中捕获的AssertionError异常 您可以在官方文档中找到所有内容:Official Doc
它的作用已经在其他答案中进行了解释。我将进一步扩展它的用途。它有两个主要用途。
检测编程错误
第一个是在你的程序中包含一种防止可能的程序员错误的“安全网”。想象一下,您调用了一个您知道永远不会返回负值的函数,并且您将其响应用作另一个操作的一部分:
我坚持,
otra_funcion()
永远不会返回负数。如果是这样,那就错了。但是您并不完全信任它,因为可能该函数不是您编写的,并且可能在包含它的库的稍后更新中,出现错误并返回负数。assert
允许您表达一个必须始终为真的条件,否则程序将被中断。我们可以这样添加assert
:虽然它
a
确实是积极的,但好像我们没有添加assert
,因为它什么都不做。但如果它曾经是负面的,我们会很平静,因为它assert
会中断程序并转储一个跟踪,指示程序中它assert
失败的点。我们可以包含一条消息,该消息将成为表达式为假时引发的异常的一部分。所以:
如果发生异常,此消息将成为错误的一部分,并将帮助我们追踪问题。
一个重要的细节是
assert
应该用于捕获不应该发生的条件,如果它们确实发生,则应将其视为编程错误。另一方面,如果该函数可能返回负数,但在我的特定应用程序中它对我不起作用并且我想将其视为错误,则正常的做法是使用 aif
来验证它,并在必要时,生成更合适的异常。例如:测试
当您编写单元测试时(包括调用一个函数,其结果您已经提前知道它应该是什么,但您正在检查它是否实际返回您所期望的),
assert
用于验证该值是否是预期的.例如,假设您编写了一个名为的函数
raiz_cuadrada()
并想检查它是否工作正常。你可以写一些这样的测试:通常会有更多的测试,但要得到这个想法就足够了。
当您从测试自动化环境运行这些测试时,该环境会捕获
AssertionError
发生的那些测试,以便最终它可以向您报告有多少测试失败(以及哪些测试失败),以便您可以查看失败的功能不符合你的预期测试在开发过程中非常重要,因为如果您修改函数
raiz_cuadrada()
以修复它所具有的错误,您需要确保这样做没有引入另一个错误。拥有一组良好的测试并且在修改代码后它们都继续通过是必不可少的。assert 是一个 Python 语句,允许您定义必须始终满足的条件。如果布尔表达式为 True,则断言什么也不做,如果为 False,则抛出异常。
它们可以用作方法、函数、代码块中的前置条件和后置条件,但最重要的是指定不变量。它比编写 if 语句更短,对读者来说更清晰,并且作为奖励,如果使用 -O 调用解释器,则不会执行该语句。
那么什么时候做:
抛出一个可以在try/except中捕获的AssertionError异常
您可以在官方文档中找到所有内容:Official Doc