关于异常的使用心得

原创 2001年03月29日 13:42:00

作者:lythm

工欲善其事,必先利其器.在做一个项目时必定要先做好调试除错的准备在面向过程编程的时代都是以检测
返回的错误代码来判断错误,可是这种方法的缺点是如果编写某一操作的时候可能出现的错误代码(比如说
硬件操作)太多,那么最终用户将会陷入倒无穷无尽的检测代码中,可能会是这个样子

UINT  err=Functionxx(...);

if(err==xxx)
...
if(err==xxx)
...
...
...
省略100行

只有这样程序才能在出现意外的时候有所相应和恢复,但是由于错误处理太庞大了最终用户很可能这样

if(Functionxx()!=SUCEEDED)
exit(0);

这样某些可能可以恢复的操作也无法幸免了,(比如说网络连接超时,终止运行太过分了吧,只要弹出个对话
框就行了)

在面向对象编程的时候,不可否认,很多人仍然还是这样排错的,其实各种面向对象的语言都提供了异常处
理的手段(比如说Object  Pascal,C++,本文以C++为例)

下面是我的关于异常的一些使用心得

对于各种用户来说,并不是每一种错误都是他关心的,特别是小组开发的时候比如某一模块是关于文件操作
的,那么编写这个模块的程序员只要注意关于文件操作失败的异常就行了,而网络模块的程序员只要知道网
络出错的错误处理就行了,因此,我们可以定义一个这样的类

class  CBasicException
{
CBasicException(...);
char*  GetDescription();
UINT  GetErrorCode();
...
};

然后再从这个类继承几个子类
CFileException,CNetException...
然后和具体某一类错误相关的详细的异常分别从上面的类里面继承,比如文件打开失败,空间不够...等等
可以从CFileException继承,而连接超时..等等可以从CNetException继承,如此一来就将错误分类了整个
类层次是这样的
CBasicException
/ /
CFileException CNetException
/ /              / /
COpenFailed ... CTimeOut ...

之后将各个错误码和相应的异常对应起来,一些不太重要的信息可以封装在一个异常里,比如文件打不开可
能是空间不够或共享冲突...,都可以放在一起,如果以后要专门处理某一样,比如空间不够,再从相应的基
类继承即可(COpenFialed)

然后你的函数应该这样实现

CMyfunc()
{
...
throw  Cxxx(...);
}
而在相应的调用部分则可以这样写
void  Operation1()
{
try{
Myfunc()
}
catch(CFileException&  e)//处理文件
{
printf("
throw;//重新抛出,如果搞定就不用再抛出了
}
catch(CNetException&  e)//网络
{
...
throw;
}
}
这样只要catch想要处理的异常就行了
但是你的主函数应该这样写

void  main()
{
try{
Opertion1();
Operation2();
Operation.....
...
}
catch(Cxxx&  e)//处理未捕获的重要异常
{
...
}
catch(CBasicException&  e)//对你所封装的错误总的处理
{
...
}
catch(...)//其他异常,未被封装,比如除0
{
...
}
}
这样处理就合理多了
而且如果在异常的描述里加上出错地点就更好了,比如出错函数名
不过千万不要将异常基类的catch写在子类的上面否则子类的catch可能永远不会工作了
比如:

try{
...
}
catch(CBasicException&  e)
{
...
}
catch(CFileException(&  e)
{
...
}
这样后面的catch就再也不会被执行了

另外在类的构造函数和析构函数里不能返回值的,这时就只能用异常了

关于varnish使用心得

11
  • liuzp111
  • liuzp111
  • 2014年05月13日 14:21
  • 1674

fckeditor2.6使用心得以及相关异常

本文的内容大纲是:  1. 在web中配置应用Fck;  2. 用Fck自带Api做非空验证;  3. 修改文件上传的保存路径;  4. 对文件上传做大小控制;  一. 配置和应用  ...
  • huilangeliuxin
  • huilangeliuxin
  • 2013年04月18日 13:32
  • 2990

第一周测验:网络爬虫之规则

1单选(1分) 下面哪个不是Python Requests库提供的方法? A、.post() B、.push() C、.get() D、.head() 答案:B2单选(1分) Reque...
  • codeforcer
  • codeforcer
  • 2017年03月16日 11:38
  • 1705

fckeditor2.6使用心得以及相关异常

本文的内容大纲是:  1. 在web中配置应用Fck;  2. 用Fck自带Api做非空验证;  3. 修改文件上传的保存路径;  4. 对文件上传做大小控制;  一. 配置和应用  ...
  • huilangeliuxin
  • huilangeliuxin
  • 2013年04月18日 13:32
  • 2990

Java异常使用心得

异常处理是 Java 里最引以为傲的一个地方。Java 的设计者们提供了一种对于编译及运行时异常的处理办法,这极大的增强了程序的健壮性。这里不得不提 Java 的设计哲学:没有完善异常处理的代码根本没...
  • kyyee
  • kyyee
  • 2015年12月23日 17:03
  • 308

【学习心得】异常处理总结

---------------------- android培训、java培训、期待与您交流! ---------------------- 异常在java占有很大分量,很多方法进行操作时都可能产生...
  • bynow007
  • bynow007
  • 2011年09月27日 19:37
  • 432

c++异常的一些心得

#include using namespace std; class test1 { public: test1() { cout
  • y5885922
  • y5885922
  • 2013年05月30日 22:58
  • 754

黑马程序员___异常学习心得

---------------------- android培训、java培训、期待与您交流! ----------------------异常: 就是程序在运行时出现不正常情况。 异常由来:...
  • ICAN1112233
  • ICAN1112233
  • 2012年06月14日 10:42
  • 213

java中异常心得

Java异常是我们编程中时时刻刻都要使用的特性,但是我们却很少去关注它细节的一些信 息。 Exception架构 所有的异常都是派生至Throwable,最主要的2个继承类是Exception...
  • gao454917848
  • gao454917848
  • 2014年05月22日 20:33
  • 327

关于Java导入excel表格出现下标越界异常的解决方法(个人心得记录)

最近在做java批量导入时经常出现这个异常,先上图 根据这个数组下标越界异常百度上搜索结果一大堆,但没有适合自己的解决办法,只能是自己慢慢摸索了,不过终于被我找到适合自己的解决办法了,上图 图上...
  • gwtaini3344
  • gwtaini3344
  • 2017年12月26日 09:57
  • 51
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于异常的使用心得
举报原因:
原因补充:

(最多只允许输入30个字)