OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

微软,请不要使用 Try/Catch


分享到
分类 心得体会   发布 ourjs  1388888503000
注意 转载须保留原文链接,译文链接,作者译者等信息。  

作者:karlseguin  译者:myownghost

异常处理已经被讨论十几年了。尽管在怎样处理异常方面有一些普遍共识,但在使用方面还是有一些分歧。不恰当的异常处理很容易被发现,很容易被避免,这是评价代码质量的一个很重要的指标。我知道任何事情都没有绝对一说,但一条普通的规则就是不要使用try/catch。

如果异常发生,你需要非常了解它产生的原因。如果一个意料之外的异常产生了。你还是让程序自己崩溃吧。在大多数Web应用上就是这么干的,一个用户的连接产生了异常不会影响其它用户。(注:这篇文章发表的比较早,在NodeJS及其他单线非阻塞异步编程中,一个线程崩溃了可能会影响到其它程序,不过现在已经有了比较好的解决方案,如Express,持久化session等)。所以最好的方法是做一个全局的异常日志,来记录那些未处理的异常。我经常看到程序员写处理错误的代码,以提高系统的质量。但用户会抱怨系统不稳定,但程序员想破脑袋也不知道到底是什么地方出了问题。

遗憾的是,在有些框架中他们也加了try/catch,看看下面的这个例子,在微软的基础框架里:

private void LoadImage()
{
    if (this.image != null)
    {
        this.image.Dispose();
    }
    

    if (source != null)
    {
        try
        {
            source = Path.Combine(Canvas.ApplicationPath, source);
            image = new Bitmap(source);

           IImagingFactory factory = ImagingFactory.GetImaging();
           factory.CreateImageFromFile(source, out imagingImage);
        }
        catch{}
    }
}

这段代码截自Micrsoft的.NET Compact Framework的前端基础框架(UI Framework)。上面的代码葬送了他们的框架,但这个东西被各种API调用,还广泛使用了。这是非常简单可怕的代码。为什么么他们能容忍异常从这段代码里产生?这段代码意思着如果我读取了一个不存在的图片,如"images/critical_warning.png",程序会继续运行。这可能是你想要的一种情况,但不是所有情况,这样的逻辑应该由应用程序处理,而不是在框架里面。

真正需要异常的地方只有一个,就是全局异常捕捉日志,这样可以帮助你找到所有异常产生的根本原因,并解决掉他们,然后你就可以安心睡大觉了。

一个使用try/catch来掩盖异常的系统不是一个健康的系统。

原文地址: 点此
社区评论 ( Beta版 )
  • #0 谭计伞 1411885760165

    片面。假如你是一个复杂的系统,全部交给全局,排查是很困难的(除非整个系统的代码都很熟悉),尤其维护人员不是开发人员或没有代码的时候。

OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. 一名靠谱的JavaScript程序员应备的素质
  2. PayPal为什么从Java迁移到Node.js,性能提高一倍,文件代码减少44%
  3. 人类只占到互联网流量的40%不到
  4. 人们为什么不使用Python3?
  5. 芝加哥将计算机科学列为主修课
  6. 如何面试前端工程师:Github很重要
  7. 我真的需要一门编程语言吗?
  8. 为什么谷歌的JSON响应以while(1);开头?
  9. 我为什么想把比特币一把火烧了
  10. 程序员最艰巨的十大任务
  11. AirJD-简单好用的免费建站工具

 相关阅读 - 心得体会
  1. 人们为什么不使用Python3?
  2. 代码不等于计算机科学:为什么所有人都应该学习编程
  3. 一名靠谱的JavaScript程序员应备的素质
  4. 程序员最艰巨的十大任务
  5. 世界上最优秀的程序员同时也是活得最快乐的人
  6. 做从未被做过的事:偶遇 Russell Kirsch
  7. 他们为什么说面向对象有问题,探讨面向对象的一些缺陷
  8. 入静和入世
  9. 信仰是如何毁掉程序员的
  10. 谈谈公司内部的技术分享

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号