大家来谈谈异常处理的做法

我觉得异常要区分对待。异常可以分为五类异常:A、开发时未知的异常;B、运行时底层环境异常;C、开发时上层程序调用异常;D、运行时用户操作异常;E、将异常作为返回值。

A类异常是真正的异常,例如除零、内存溢出、死机等。这类异常是开发人员所不希望的,也不知道存在的,属于开发的BUG。

B类异常一般是数据库访问异常、网络连接异常、运行时硬件环境的突变或限制导致的异常。例如网络突然断开,机子突然断电等。这类异常属于运行时硬件环境异常。

C类异常一般是指上层开发人员违下层类库的要求,如,本该先调用初始化,才执行某个功能,但上层开发人员忘了初始化。这类异常属于上层程序员的BUG。

D类异常是指用户的一些操作错误,如必填项没填,没有权限等。这类异常属于用户操作异常。

E类异常是一种函数调用失败,返回失败原因的代替方式。如:创建一个文件,如果失败,会返回为什么失败,由于文件已经存在,由于指定的目录不存在等。上层调用者再根据失败的原因进行适当的逻辑处理。这类异常不会抛出给用户。

从可见性上,A类、C类是不可预见的,都属于软件开发的BUG,原则上是不允许的。B类、D类是可预见的,开发者早就知道用户可能会违规操作、开发者早就知道运行过程中可能会断电、会掉线。这种异常是不可避免的。E类异常一种技巧。

从处理上,一般也分为三种。一种是只告诉用户一句话:系统出现异常,请与管理员联系。适合A、B、C类。另一种是友好的提示用户,如:你的密码输入有误,请重新输入。D类就是这样,更好引导用户操作。最后一种是由调用者进行逻辑处理,不用抛出用户,这正是E类异常的本意。

以前在做系统框架时,当时对异常的框架进行了分析,这是小弟一点浅见。不知道大家都是如何处理的