【发布时间】:2013-05-18 21:58:14
【问题描述】:
我有时会遇到需要捕获异常但从不对其进行任何处理的情况。换句话说,可能会发生异常,但是否发生并不重要。
我最近读到了一篇关于类似事情的文章:http://c2.com/cgi/wiki?EmptyCatchClause
这个人说说怎么评论的
// should never occur
是一种代码异味,不应该出现在代码中。然后他们继续解释评论的方式
// don't care if it happens
完全不同,我自己也遇到过这样的情况。例如,在发送电子邮件时,我会执行类似的操作:
var addressCollection = new MailAddressCollection();
foreach (string address in addresses)
{
try
{
addressCollection.Add(address);
}
catch (Exception)
{
// Do nothing - if an invalid email occurs continue and try to add the rest
}
}
现在,您可能认为这样做是个坏主意,因为您希望返回给用户并解释无法将一条或多条消息发送给收件人。但是如果它只是一个抄送地址呢?这不太重要,即使其中一个地址无效(可能只是拼写错误),您仍可能仍想发送消息。
那么我是否正确使用空的 catch 块,或者是否有更好的替代方案,我不知道?
【问题讨论】:
-
你怎么知道
Exception与抄送地址有关,而不是e.g.到内存不足的情况?你打算如何从中恢复? -
在你的例子中,我仍然会对异常做一些事情,即使只是记录它 - 甚至可能不会让用户选择要做什么失败电子邮件地址,但记录它以便您知道这已经发生了,也很好。
-
我怀疑作者的意图是说“这个错误永远不应该发生”的评论意味着编码人员没有考虑过如果错误违背预期并且无论如何发生该怎么办。第二条评论是“更好”,但更好的评论会解释为什么你不关心错误。最终,最好的异常处理取决于你的应用程序应该做什么。在某些情况下,吞下异常而不采取进一步行动是可以的。在其他情况下,您可能需要先记录它,而在某些情况下,您实际上需要尝试恢复。
-
感谢 cmets。我同意你的观点,我应该捕捉与地址格式相关的特定例外情况,并让其他人冒出来。我会做出这个改变
-
即使我们假设我们不在乎,因为电子邮件无效,最好记录异常并记下无效的电子邮件。空异常只是lazy编程的借口。
标签: c# .net exception error-handling