Try / Catch块的最低要求

时间:2013-10-12 21:28:12

标签: vb.net

我在previous question中发布了一个代码示例,这是关键部分:

Try
    first = _string.IndexOf(_firstchar) + 1
    second = _string.IndexOf(_secondchar)
    If first >= 1 And second >= 0 Then
        retval = _string.Substring(first, second - first)
    End If
Catch ex As Exception
End Try

一位经验丰富的VB用户表示,Try / Catch的这种用法是“邪恶的”。

为什么这种用法是“邪恶的”,当我们不想打扰错误时,什么程度上足以让程序继续?

2 个答案:

答案 0 :(得分:5)

Catch块是邪恶的,因为它可以隐藏您应该处理的异常。这里Try-Catch是多余的,你应该使用带有第二个起始索引的重载:

first = _string.IndexOf(_firstchar)      
If first >= 0 Then
    first += 1
    second = _string.IndexOf(_secondchar, first)
    If second >= 0 Then
        retval = _string.Substring(first, second - first)
    End If
End If

请注意,您应使用AndAlso代替And

答案 1 :(得分:3)

被认为是不好的做法的原因是因为你在那里捕获的例外并没有真正以任何方式处理,所以它不被注意。这反过来会导致程序流程中的其他问题,并且会听到这些问题回到根本原因,或者即使被追踪,修复它们可能会因先前决定掩盖错误情况而变得复杂。

也就是说,可能在极少数情况下吞下这样的异常是合适的。但是如果你确实做出了这个决定,请务必记录下这个事实并说明你决定在那时忽略错误的原因。

例如,忽略由日志记录功能触发的异常可能是合适的。由于记录器的目的是记录错误,如果由于某种原因记录失败,那么该异常可能没有太多其他内容。