`
glutinit
  • 浏览: 46225 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

代码大全读后杂记-04 错误处理技术

阅读更多
【题外话】 今天下午在公司犯困打盹的间隔,看到了同学开的公司现在已经红红火火,难免有些惆怅,虽然我知道不应太在意外在的物质,但对个人价值的体现或梦想的追逐与实现还是非常佩服的。虽然我大概走不出一条所谓创业的路,但自己的梦想依旧需要在现实中用汗水和努力去赢取,留下此言以示激励,也愿上帝能够加添给我力量,让我勇往直前:)

好吧,继续看书吧先;

在java和C++用,可以用断言等技术来处理不应该发生的错误;但有可能会发生的错误又当如何处理呢?代码大全中列举了如下几点,按照自己的经验来说,我觉得写的挺齐全的了。下面这些处理方法并不是适用于任何场景,需要按照实际需要来决定选择何种方式~

1. 返回中立值
   中立值就是一个没有危害的值,这个要看找你写代码时候具体的场景来决定了,比如说int值就返回0(或者返回-1之类),字符串就返回"",指针操作就返回null等等;
  
2. 换用下一个正确的数据
   在做某个循环操作的时候,在中间某个环节发生了错误,那么就继续运行下去,直到得到下一个正确的答案为止,比如每秒以100次的速度读取温度计的数据,如果有一次发生了错误,那么就尝试1/100秒后读下次的数据并返回;这个方法也只是适用于某种场景;

3. 返回与前一次相同的数据
   比如在绘制图案时,在绘制某个区域时读取颜色数据错误,那么就选择用最近一次的颜色来绘制之,因为,理论来说,绘制的图案区域应该是彼此相连的

4. 换用最接近的合法值
   比如某个测试仪只能测定某个范围内的速度,比如0~100,如果你观测的物体速度大于100了,那么就返回最大值100。(如果经常发生超越100的观测物体,就需要修改程序来调整测速范围了)

5.把警告信息记录到日志中去
   这个方法可以和其他的错误处理技术合用,保留下足够的日志信息可以让你更准确的定位错误发生的原因,这在商业软件中是比较常用的。客户肯定不喜欢你卖给他的软件跑出了你自己都说不清楚的错误...  

6.返回一个错误码
   使用这个方法的前提是,调用此模块的某个子程序了解你返回错误码所代表的意思,比如你返回-1表示拥护错误,返回-2表示密码错误等。当然,你也可以抛出某些异常。
    可以选择如下几个方法:
    1. 设置一个状态变量的值(使用者可以通过该变量了解该方法的错误原因)
    2. 直接返回一个值表示函数的状态
    3. 利用异常机制抛出异常

7.调用错误处理子程序或对象
   用一个全局或几个专用的子程序或对象来处理所有发生的异常,这个方法的优点就是把所有异常处理的职责都集中在一起,让调试变得更加简单。但这也是缺点,因为这样就造成了程序代码之间的过度耦合。

8. 当错误发生时显示出错信息
   一般在带有界面的程序中用到该方法,让用户可以及时的得到错误的信息。该方法的缺点就是在软件本地化时会遇到挑战。另外,最好不要将所有的错误都告诉用户,一是有些错误原因过分专业,用户不需知道;二是暴漏过多错误原因,也让攻击者有机可乘。

9.用最妥当的方式在局部处理错误
    好吧,作者在这一点想表达的意思我没怎么看懂...

10.关闭程序
    某些极端重要的应用程序中,就需要用这种暴力的方式来处理异常。比如书中提到的一个给病人注射药剂的程序,如果接收到一个错误的放射剂量,最好关闭程序让医生来解决,而不是选择注射最大量等等方法...这可是人命关天啊...

有些方法我也很少用到,以后写代码时可以借鉴一下






  
 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics