У меня есть следующий код
Try
'Some code that causes exception
Catch ex as ExceptionType1
'Handle Section - 1
Catch ex as ExceptionType2
'Handle section - 2
Catch ex as ExceptionType3
'Handle section - 3
Finally
' Clean up
End Try
Предположим, что ExceptionType1 генерируется кодом, который обрабатывается разделом - 1. После обработки этого в разделе-1, могу ли я передать управление разделу-2 / разделу-3? Это возможно?





Измените код, чтобы перехватить все исключения в одном блоке и определить оттуда тип и путь выполнения.
Я думаю, вы могли бы добиться желаемого поведения, если бы выполняли вложенные блоки try. После создания исключения выполнение переходит к блоку catch. Если ничего не отбрасывают заново, он переходит к окончательному.
Вы можете вызывать функции в обработчиках исключений.
Try
'Some code that causes exception'
Catch ex as ExceptionType1
handler_1()
handler_2()
handler_3()
Catch ex as ExceptionType2
handler_2()
handler_3()
Catch ex as ExceptionType3
handler_3()
Finally
handler_4()
End Try
Вы не указали язык, а языка я не знаю, поэтому отвечаю в основном.
Вы не можете этого сделать. Если вы хотите иметь общий код, поместите его либо в finally, либо, если он должен выполняться только в некоторых случаях, вы можете скопировать этот код в соответствующие случаи. Если код больше и вы хотите избежать избыточности, вы можете поместить его в отдельную функцию. Если это снизит удобочитаемость вашего кода, вы можете вложить свои блоки try / catch (по крайней мере, в Java и C++. Я не знаю вашего языка). Вот пример на Java:
class ThrowingException {
public static void main(String... args) {
try {
try {
throw new RuntimeException();
} catch(RuntimeException e) {
System.out.println("Hi 1, handling RuntimeException..");
throw e;
} finally {
System.out.println("finally 1");
}
} catch(Exception e) {
System.out.println("Hi 2, handling Exception..");
} finally {
System.out.println("finally 2");
}
}
}
Это распечатает:
Hi 1, handling RuntimeException..
finally 1
Hi 2, handling Exception..
finally 2
поместите свой общий код во внешний блок catch. Выполнение этого с использованием вложенной версии также обрабатывает случаи, когда возникает исключение без явного повторного выброса старого в блоке catch. Это может даже лучше соответствовать тому, что вы хотите, но может и нет.
Не могли бы вы указать, зачем вам это нужно?