异常处理

异常处理

异常主要两类:

一、 客观异常。其实就是结构化异常,客观异常是我自己取的。因为结构化异常是系统级的异常。比如:除数为0、无效内存访问,浮点溢出等。这种异常如不被捕获,就会直接导致程序中止。

二、 主观异常。这种异常不会导致程序暴崩,是程序员主观认为要处理的错误。比如:文件读写错误,函数调用失败等。 

客观异常的处理意义不言而喻。如果出现客观异常时有数据未存盘,岂不导致数据丢失。处理异常可以阻止程序暴崩, 虽然可能无法使程序正常运行,但至少可以做一些善后工作。 

客观异常处理方法。由于客观异常往往是某个语句的执行引起的,而不是某个函数的调用。更本就没有错误代码返回,所以不方便分析。 一般使用C内置语法。设置异常保护块使用关键关字_try,捕获异常使用关键字_except.

代码示范:

  

主观异常处理意义。主观异常的处理是算法的一部分,对它的处理保证程序正确运行。

主观异常的处理方法。通常的处理方法是将错误代码作为返回值返回调用函数,调用函数分析返回的错误代码并进行异常处理。这是程序控件流程的一个普通逻辑,可以自然地使用一个选择语句解决,但如果不能在发生异常的本级调用函数中处理异常,只有将错误代码层层返回,直到一个处理异常的上级调用函数。所以直接使用流程控制方式处理不利于异常的集中处理。

程序一,使用控件逻辑进行处理:

  

为了使操作更简洁,C++提供了 “抛出-捕获”的异常处理方式。这就是try-catch语句的由来。

程序二,使用“抛出-捕获”异常处理方式:

   

因为catch能捕获try程序段直接或间接调用的函数中执行的用throw人为扔出的异常。所以只要在主函数中集中处理三个函数的异常即可,而FnLayer1FnLayer2可以不处理上层调用所产生的异常(指throw扔出来的异常)。 

遗留问题:try-catch无法捕获结构化异常。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值