В Catch вы бросаете ExpectedExceptionType, но никогда не обрабатываете его.Допустим, у вас был такой код:
Sub Main()
Try
MethodWhichCanThrow()
Catch ex as ExpectedExceptionType
'Log exception here, but don't stop execution
Console.WriteLine("Expected exception: " & ex.ToString())
End Try
'Some more code here
End Sub
Sub MethodWhichCanThrow()
If someCondition Then
Throw New ExpectedExceptionType("This error is expected")
End If
'Do something if there's no error here
End Sub
Вы можете видеть, что у нас есть оператор Catch, который перехватывает только ожидаемый тип исключения .Так что в этом случае, если у вас есть какое-то другое непредвиденное исключение, оно будет аварийно завершать работу, но если у вас будет ожидаемая ошибка, он будет обходить код из MethodWhichCanThrow
, но продолжит выполнение остальной части кода.
Я будутакже добавьте, что если ожидается некоторое состояние ошибки, и если возможно проверить эту ошибку с помощью какого-либо метода, который не генерирует ошибку, предпочтительно использовать этот метод.Например, это:
Dim number As Integer
If Integer.TryParse(value, number) Then
Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
Console.WriteLine("Conversion failed")
End If
... предпочтительнее этого:
Dim number As Integer
Try
number = Int32.Parse(value)
Console.WriteLine("Converted '{0}' to {1}.", value, number)
Catch e As FormatException
Console.WriteLine("Conversion failed")
End Try
В этом случае версия try-catch не так уж плоха, но вам все равно придетсязнать, какой тип исключения выдается, и в каком случае.Кроме того, в реальном коде, имеющем много операторов try-catch, становится труднее следовать коду.