2

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

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 的这种用法是“邪恶的”。

为什么这种用法是“邪恶的”,当我们不想为错误烦恼时,什么足以让程序继续运行?

4

2 回答 2

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.

于 2013-10-12T21:32:05.500 回答
3

被认为是不好的做法的原因是因为您在那里捕获的异常并没有以任何方式真正处理,所以它被忽视了。反过来,这可能会导致程序流程的其他问题进一步出现,并且会听到这些问题以返回根本原因,或者即使被跟踪,修复它们可能会因先前决定掩盖错误情况而变得复杂。

话虽如此,在极少数情况下,可以接受这样例外情况。但是,如果您确实做出了该决定,请务必记录事实并说明您当时决定忽略该错误的原因。

例如,忽略由日志记录函数触发的异常可能是合适的。由于记录器的目的是记录错误,如果由于某种原因记录失败,则可能与该异常没有太多关系。

于 2013-10-12T21:35:01.930 回答