美文网首页Python
Python中的assert关键字

Python中的assert关键字

作者: 耀凯考前突击大师 | 来源:发表于2017-05-18 15:37 被阅读87次

    基本上每一种编程语言中都有assert声明。

    总的来说,assert condition的意义是令程序测试condition,并在condition测试结果为false的时候抛出异常

    在Python中,assert有两种形式:

    1. assert expression

      assert expression等同于如下代码:

      if _debug_:
          if not expression:
              raise AssertionError
      
    2. assert expression1, expression2

      assert expression1, expression2等同于如下代码:

      if _debug_:
          if not expression1:
              raise AssertionError(expression2)
      

    以上两段代码中的_debug_AssertionError都代表的是Python中内建的变量。当前Python中_debug_在普通情况下均为True。只有当程序执行在优化模式下为False(优化模式为命令行的-O选项)。所以当程序以优化模式编译后,assert声明并不会被执行。需要注意的是,我们并不需要手动在错误信息中加入assert后被检测的expression的代码,这些代码会自动显示在出错的堆栈信息中。

    另外,给_debug_赋值是非法的。_debug_的值在程序的编译器开始工作时就已经确定了。

    我们可以通过以下这个简单的python shell中的例子来理解assert

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

    • 一点注意事项

      assertprint是不同的。print()可以正常工作,但assert()是错误的。这是因为print()是一个python内建方法而assert()不是。看如下例子:

      assert(2 + 2 == 5, "Oops something went wrong.")是错误的。

      assert 2 + 2 == 5, "Oops something went wrong."是正确的。

      其中第一条代码错误的原因是:根据assert的意义,程序将会检测assert后面的expression的值,也就是bol((2 + 2 == 5, "Oops something went wrong."))。而Python中一个非空元组的布尔值是True

      再比如assert(False)。当()出现在assert后面时,Python编译器会认为assert后面的输入是一个元组。而一个非空元组的布尔值总为True。因此assert()并不能正常工作。

    相关文章

      网友评论

        本文标题:Python中的assert关键字

        本文链接:https://www.haomeiwen.com/subject/tjvsxxtx.html