建议63:避免“吃掉”异常

嵌套异常是很危险的行为,一不小心就就会将异常堆栈信息,也就是真正的Bug出处隐藏起来。这还不是最严重的,最严重的就是“吃掉”异常,即捕获,然后不向上层throw。

避免“吃掉”异常,并不是说不应该“吃掉”异常,而是这里有个重要原则:该异常可被预见,并且通常情况它不能算是一个Bug。

想象你正在对上万份文件进行解密,这些文件来自不同的客户端,很有肯能存在文件被破坏的情况,你的目标是将解密出来的数据插入数据库。这个时候,你不得不忽略掉那些解密失败的文件,让整个过程进行下去。当然,记录日志时必要的,因为后期你可能对解密失败的文件做统一处理。

另外一种情况,可能连记录日志都不需要。在对上千个受控端进行控制的分布式系统中,控制端需要发布心跳数据来判断受控端的在线情况。通常的做法是维护一个型号量,如果在一个可接受的阻滞时间内(如500ms)心跳数据发送失败,那么控制端线程将不会收到信号,即可以判断受控端的短线状态。这种情况下对每次SocketException进行记录,通常是没有意义的。

如果你不知道如何处理一个异常,那么千万不要“吃掉”异常,如果你一不小心“吃掉”了一个本该往上传递的异常,那么就可能诞生一个Bug,而且,解决它会很费周折。

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

最新文章

  1. SQL中随机数函数rand()简介
  2. fzu2188 状压dp
  3. Maven&&Ant使用
  4. IOS开发之—— ShareSDK的使用
  5. BZOJ 3224: Tyvj 1728 普通平衡树 treap
  6. Ubuntu上安装Maven Eclipse以及配置
  7. laravel--has方法--查看关联关系
  8. ios的UIImage的两种不同的图片加载方式 tom猫
  9. 发送邮件java实现
  10. z-index用法总结
  11. [HDU1000] A + B Problem
  12. Redis 学习开发笔记
  13. [LeetCode] 26. Remove Duplicates from Sorted Array ☆(从有序数组中删除重复项)
  14. CSS语法基础
  15. 添加dubbo.xsd的方法
  16. 转载CSDN博客步骤
  17. php开启pdo扩展
  18. DevExpress ASP.NET v18.2新功能详解(四)
  19. IDE和SDK
  20. C++ pair(对组)用法

热门文章

  1. VMware Workstation Pro 12 创建虚拟机(安装Ubuntu)
  2. Flask之模板
  3. Error: listen EACCES 0.0.0.0:8080 错误解决记录
  4. mongodb主从复制 副本集(六)
  5. npm 全局环境变量配置
  6. 关于struts2.x中(警告: Could not find property [struts.valueStack])的解决方法
  7. Etcd的基本使用
  8. c3p0、dbcp和proxool比较
  9. Spark角色介绍及spark-shell的基本使用
  10. http协议简析(一)