为什么空的catch块是一个坏主意?
我刚刚看到一个关于try-catch的问题,哪些人(包括Jon Skeet)认为空的catch块是非常糟糕的主意? 为什么这个? 是否没有任何情况下空的渔获不是错误的设计决定?
例如,我的意思是,有时候你想从某个地方获得一些额外的信息(web服务,数据库),你真的不关心你是否会得到这个信息。 所以你试着去弄明白,如果发生什么事情,没关系,我只需添加一个“catch(Exception ignored){}”,这就是全部
通常,空白的try-catch是一个糟糕的主意,因为你正在默默吞下一个错误条件,然后继续执行。 有时候这可能是正确的做法,但通常这表示开发人员看到了一个异常,不知道该如何处理,因此用空白的渔获来解决问题。
这是将黑色胶带放在发动机警告灯上的编程等效物。
我相信你处理异常的方式取决于你工作的软件的哪一层:雨林中的例外。
总的来说,这是一个糟糕的主意,因为这是一种真正罕见的情况,在这种情况下,任何失败(例外情况,更一般地说)都会得到适当的回应。 最重要的是,空的catch
块是使用异常引擎进行错误检查的人员使用的常用工具,他们应该先发制人。
说它总是不好的是不真实的......这是真的很少。 在某些情况下,您不在乎是否存在错误,或者错误的存在表明您无论如何都无法做出任何事情(例如,将以前的错误写入文本日志文件,以及你会得到一个IOException
,意味着你无法写出新的错误)。
我甚至不会说甚至说使用空的catch块的人是一个糟糕的程序员,也不知道他在做什么......
如有必要,我使用空的catch块。 有时我正在消费的图书馆程序员不知道自己在做什么,即使在没有人需要的情况下也会抛出异常。
例如,考虑一些http服务器库,如果服务器抛出异常,我无所谓,因为客户端已断开连接并且index.html
无法发送。