Assert 断言的重要性

 

话说内存的动态使用真是C/C++的一门学问哪,没有了指针和动态内存的使用不知道C/C++

会失色多少。当然了,这也是叫人头疼的东西。当然了有一个很重要的东西可以在一定程度上防止问题的出现:那就是比IF语句判定更加有效的东西ASSERT宏:

 

编成中的感悟,拿合并两个有序数组来说明吧:

 

#include "iostream.h"

#include "stdio.h"

#include "assert.h"

#include "stdlib.h"

int * Merge( int s1[],  int s2[], int s1Len, int s2Len)

{

       assert(s1!=NULL && s2!=NULL);

       int *p1, *p2, *p3, *s3;

       p1 = s1;

       p2 = s2;

       s3 = (int*) malloc (sizeof(int)*(s1Len + s2Len));

       p3 =s3;

       if (s3==NULL)

       {

              printf("ERROR on S3 = NULL!");

              //虽然有这么一句,但是有时显示不出来!这时间Assert就重要了!

              return NULL ;

       }

       assert(s3!=NULL);

      

      

       while (s1Len>0 && s2Len>0)

       {

              if (*p1 <= *p2)

              {

                     *p3 =*p1;

                     p1++;

                     p3++;

                     s1Len--;

              }

              else if (*p1 > *p2)

              {

                     *p3 = *p2;

                     p2++;

                     p3++;

                     s2Len--;

              }

       }

      

      

      

       while (s1Len > 0)

       {

              *p3 = *p1;

              p3++;

              p1++;

             

              s1Len--;

             

       }    

       while (s2Len > 0)

       {

              *p3 = *p2;

              p3++;

              p2++;

             

              s2Len--;

             

       }    

      

       return s3;

      

}

第一出是防止函数的入口错误,跟林锐学来的^_^!

然后么就是重点了:

if (s3==NULL)

       {

              printf("ERROR on S3 = NULL!");

              //虽然有这么一句,但是有时显示不出来!这时间Assert就重要了!

              return NULL ;

       }

其实就是s3NULL也不是一定就显示出来,奇怪把,不欣可以在这句前面加个

S3 = NULL .这时   assert(s3!=NULL);起到了最后保证的一个功能。提示错误。

否则就是提示什么XXX内存是不可读的(就VC6.0来说)。

这里还有就是明明是if (s3==NULL) 如果不小心写成if (s3=NULL)

这时assert几乎成了最后改正的机会,否则那个地方错都不知道!

 

好了感想写到这里了,最近压力大啊。

 

 

### Python `assert` 断言的使用方法 #### 基础语法 在 Python 中,`assert` 是一种用于调试程序的有效工具。它的基本语法如下所示: ```python assert condition, error_message ``` 其中,`condition` 表示要验证的条件表达式;如果该条件为假,则触发异常并终止程序运行。可选参数 `error_message` 提供了当断言失败时显示的具体错误信息[^1]。 需要注意的是,在实际编码过程中应避免误用括号书写方式,例如 `(False, "Error")` 这样的形式并不被支持作为断言语句的一部分。 #### 错误处理机制 当 `assert` 后面跟随的布尔值计算结果为 False 时,Python 将引发一个名为 `AssertionError` 的异常,并停止执行后续代码逻辑。这种行为有助于开发者快速定位潜在问题所在位置以及原因分析[^3]。 另外值得注意的一点是,即使省略自定义消息部分,默认情况下也会抛出相应的 Assertion 异常提示用户存在未满足的前提假设情况发生。 #### 实际应用案例 以下是几个关于如何正确运用 `assert` 关键字的例子: ##### 示例一:基础数值比较 ```python def divide(a, b): assert b != 0, '除数不能为零' return a / b print(divide(10, 2)) # 输出5.0 # 如果尝试调用divide(10, 0),将会看到指定的消息:“除数不能为零” ``` ##### 示例二:数据类型校验 利用内置函数 isinstance 来确认传入变量是否符合预期类别需求。 ```python def process_string(s): assert isinstance(s,str), f'输入 {s} 不是一个字符串!' print(f'Processing "{s}"...') process_string('hello') # 正确路径下的正常打印操作 try: process_string([1,2]) # 抛出带有特定描述性的 AssertionError except Exception as e: print(e) # 屏幕上显示出错详情:"输入 [1, 2]不是一个字符串!" ``` 上述两个例子展示了不同场景下合理设置前置约束的重要性——既保护算法免受非法输入干扰又能增强整体健壮性[^4][^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值