Попробуй поймать блок

У меня есть следующий код

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? Это возможно?

12.12.2008 20:02:29
Не могли бы вы опубликовать цель, почему вы хотели бы сделать это?
shahkalpesh 12.12.2008 20:09:59
4 ОТВЕТА

Измените код, чтобы перехватить все исключения в одном блоке и определить тип и путь выполнения оттуда.

9
31.01.2012 13:01:32

Я думаю, вы можете получить желаемое поведение, если будете делать вложенные блоки try. Как только выдается исключение, выполнение переходит к блоку catch. Если ничего не отбрасывается, оно, наконец, переходит к.

1
12.12.2008 20:08:01

Вы можете вызывать функции в обработчиках исключений.

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
3
12.12.2008 20:10:10

Вы не указали язык , и я не знаю язык, поэтому я отвечаю в целом.

Вы не можете сделать это. Если вы хотите иметь общий код, вставлять его в код 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. Это может соответствовать тому, что вы хотите, даже лучше, но может и нет.

2
12.12.2008 20:22:09