assert 的理解

assert即断言,也即做出一些假设,程序运行时如果假设不成立,程序就会中断。没有很多调试经验,可能不太理解断言在哪会用到,实际上我们在调试一个出错的程序时,由于程序出错的位置往往不是错误起因的位置,我们需要追溯错误的起源,就需要在前方的一定位置确保某个变量的值符合一定的条件。 比如VS有局部数组变量越界访问检查机制,如果函数中的数组被越界访问,在函数结束时会报错,但是我们并不知道具体是在哪次访问中越界了,我们可以在每次访问前用assert断言数组下标变量的值小于数组大小,这样如果发生越界访问就可以确定其具体位置。
百度百科中列举的一些使用断言的位置:
1.可以在预计正常情况下程序不会到达的地方放置断言 :assert false
2.断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)
3.使用断言测试方法执行的前置条件和后置条件
4.使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足。(如age属性应大于0小于某个合适值)
 

assert 可以实现如下功能:

  • 保证参数之间的大小等约束关系;
  • 函数执行过程中得到的中间结果是否符合预期;

    def gen_batch(batch_size, skip_window, num_skips):
        assert batch_size % num_skips == 0
        assert num_skips <= 2 * skip_window

猜你喜欢

转载自blog.csdn.net/qq_29678299/article/details/90028931