26. 不要忽视错误!

不要忽视错误!

        有天晚上我经过一条街去酒吧见一些朋友,我们曾经在一起喝过,急切地想再见到他们。匆忙中,我没有看路,被道路边缘绊了一下,结果摔倒在地。我想,好吧,谁叫你不注意,活该。
        我的腿受伤了,但是我急着去见朋友,所以我爬起来继续前进。随着我走得越远,疼痛越发厉害。尽管我最初认为是撞击的原因,但很快我就意识到有地方出问题了。
        但我仍然急着去酒吧,不理会疼痛。当我到达时,已经痛到了极点。那晚我过得很糟,被疼痛弄得心烦意乱。第二天早上我去看医生,发现摔裂了胫骨。如果我当时感到疼痛后就停下来,也不至于因走路受更多额外的伤。那可能是我一生中最最糟糕的一个早晨了。
        有太多的程序员像我那个悲惨的夜晚一样写代码。
        错误,什么错误?没什么大不了老实说,我可以忽略它。这可不是好代码的致胜策略。实际上,纯粹就是懒惰。(错误的懒惰。)不论你认为代码中发生某个错误是多么不可能,你都应该检查并处理它。每次都要这样。不这样做也不是在节约时间:你只是把潜在的错误堆到了将来。
        我们在代码中用这些方法报告错误:
        · 返回值可以用作函数的结果以表示“没有正常工作”。错误的返回代码太容易被忽略了。在代码中看不到强调问题的东西,实际上,忽略一些标准C函数的返回值已经成为一种标准惯例了。你会经常检查printf的返回值?
        · 错误码是一个奇特的C语言记错方法,一个独立的全局变量集合以标识错误。它很容易被忽略,很难使用,也会导致各种恶心的问题,比如,你用多线程调用同一个函数时会发生什么?有的平台能帮你防止这些痛苦,有些则不会。
        · 异常是一种更结构化的、语言支持的标识和处理错误的方法,不可能忽视它们,是吗?我曾经看过很多这样的代码:

try {
    // ...do something...
}
catch (...) {} // ignore errors
        这糟糕的结构的唯一优点就是它突出了你正在做一些不道德事情的事实。
        如果你忽略一个错误,对之视而不见,假装什么都没有出问题,就是在铤而走险。我的腿由于当时没有立即停下来而变得更糟,同理,无视错误继续下去会导致更复杂的失败。尽早解决问题,快刀斩乱麻。
        不处理错误会导致:
        ·  脆弱的代码。代码充满了刺激人的、难以发现的bug。
        ·  不安全的代码。黑客经常探寻不充分的错误处理来黑入软件系统。
        ·  糟糕的架构。如果你的代码中的有需要冗长的持续处理的错误,可能接口就很烂了。将错误展现出来能够使它们不那么侵入,并且处理也不那么繁杂。
        你需要检查所有潜在的错误,同样,你也需要在接口中公开所有错误的条件。不要隐藏它们来假装你的服务总是正常的。
我们为什么不检查错误?常见的借口有很多。这些里面哪些是你同意的?你会怎么反驳它们?
        · 错误处理搅乱了代码流程,使之难以阅读,难以看出执行的“正常”流程。
        · 这是额外的工作,况且我的最后期限已经逼近了。
        · 我知道这个函数调用永远不会返回错误(printf总能正常工作,malloc总能返回新的内存——如果它失败了,我们就有更大的问题要处理了...)。
        · 这只是个小玩意儿程序,不需要按产品级来编写。

原文:Don't Ignore that Error! by Pete Goodliffe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值