Как продолжить выполнять код после того, как исключение выдается?

Я хотел бы знать, существует ли способ позволить программе продолжиться после того, как исключение выдается. Например:

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
7
задан TylerH 23 April 2019 в 16:40
поделиться

5 ответов

Если вы делаете что-то, от чего умеете оправиться или что не является жизненно важным, вы должны заключить только эту строку в 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
11
ответ дан 6 December 2019 в 09:57
поделиться
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
1
ответ дан 6 December 2019 в 09:57
поделиться

Хотя 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
3
ответ дан 6 December 2019 в 09:57
поделиться

Если я не ошибаюсь, в «Рекомендациях по обработке исключений» сказано, что если вы можете проверить наличие ошибки, которая может произойти, то проверьте это условие. Если вы можете проверить наличие dbnull, сделайте это.

0
ответ дан 6 December 2019 в 09:57
поделиться

VB.net не поддерживает этот тип конструкции. После того, как исключение развернет стек, его нельзя будет развернуть обратно. Некоторые языки позволяют возобновить исключение, но они требуют более сложного управления стеком - по сути, корутинов.

0
ответ дан 6 December 2019 в 09:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: