Я хотел бы знать, существует ли способ позволить программе продолжиться после того, как исключение выдается. Например:
Try
line 1
line 2
line 3
line 4 ' (here the exception is thrown and jumps to the catch)
line 5 ' <-- I would like the program to continue its execution, logging the error
line 6
Catch ex as Exception
log(ex.tostring)
End Try
Если вы делаете что-то, от чего умеете оправиться или что не является жизненно важным, вы должны заключить только эту строку в try / catch с конкретным уловом. например
Try
line 1
line 2
line 3
Try
line 4 ' (here the exception is throw and jumps to the catch)
Catch iox as IOException ' or whatever type is being thrown
'log it
End Try
line 5 ' <-- I would like the program to continue its execution after logging the error
line 6
Catch ex as Exception
log(ex.tostring)
End Try
try
line 1
catch ex as exception
log(ex.tostring)
end try
try
line 2
catch ex as exception
log(ex.tostring)
end try
try
line 3
catch ex as exception
log(ex.tostring)
end try
try
line 4 ' (here the exception is throw and jumps to the catch)
catch ex as exception
log(ex.tostring)
end try
try
line 5 ' <-- I would like the program to continue its execution after logging the error
catch ex as exception
log(ex.tostring)
end try
try
line 6
catch ex as exception
end try
Хотя On Error Resume Next
по-прежнему доступен в VB.NET , он является взаимоисключающим с предпочтительным методом обработки структурированных исключений.
Вместо этого я бы рекомендовал использовать предложение finally
блока Try..Catch..Finally
, чтобы гарантировать, что Line 5 и Line 6
получат выполняется, даже если строка 4 (или любая предыдущая строка) выдает.
Try
line 1
line 2
line 3
line 4
Catch ex as Exception
log(ex.tostring)
Finally
line 5
line 6
End Try
Если я не ошибаюсь, в «Рекомендациях по обработке исключений» сказано, что если вы можете проверить наличие ошибки, которая может произойти, то проверьте это условие. Если вы можете проверить наличие dbnull, сделайте это.
VB.net не поддерживает этот тип конструкции. После того, как исключение развернет стек, его нельзя будет развернуть обратно. Некоторые языки позволяют возобновить исключение, но они требуют более сложного управления стеком - по сути, корутинов.