异常处理
异常主要两类:
一、 客观异常。其实就是结构化异常,客观异常是我自己取的。因为结构化异常是系统级的异常。比如:除数为0、无效内存访问,浮点溢出等。这种异常如不被捕获,就会直接导致程序中止。
二、 主观异常。这种异常不会导致程序暴崩,是程序员主观认为要处理的错误。比如:文件读写错误,函数调用失败等。
客观异常的处理意义不言而喻。如果出现客观异常时有数据未存盘,岂不导致数据丢失。处理异常可以阻止程序暴崩, 虽然可能无法使程序正常运行,但至少可以做一些善后工作。
客观异常处理方法。由于客观异常往往是某个语句的执行引起的,而不是某个函数的调用。更本就没有错误代码返回,所以不方便分析。 一般使用C内置语法。设置异常保护块使用关键关字_try,捕获异常使用关键字_except.
代码示范:
主观异常处理意义。主观异常的处理是算法的一部分,对它的处理保证程序正确运行。
主观异常的处理方法。通常的处理方法是将错误代码作为返回值返回调用函数,调用函数分析返回的错误代码并进行异常处理。这是程序控件流程的一个普通逻辑,可以自然地使用一个选择语句解决,但如果不能在发生异常的本级调用函数中处理异常,只有将错误代码层层返回,直到一个处理异常的上级调用函数。所以直接使用流程控制方式处理不利于异常的集中处理。
程序一,使用控件逻辑进行处理:
为了使操作更简洁,C++提供了 “抛出-捕获”的异常处理方式。这就是try-catch语句的由来。
程序二,使用“抛出-捕获”异常处理方式:
因为catch能捕获try程序段直接或间接调用的函数中执行的用throw人为扔出的异常。所以只要在主函数中集中处理三个函数的异常即可,而FnLayer1与FnLayer2可以不处理上层调用所产生的异常(指throw扔出来的异常)。
遗留问题:try-catch无法捕获结构化异常。