2008-12-12 10 views
1

je le code suivantTry Catch bloc

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 

Supposons ExceptionType1 est lancée par le code qui est gérée par section - 1. Après la manipulation que dans la section-1, puis-je avoir un contrôle transmis à l'article-2 /section 3? Est-ce possible?

+0

Pourriez-vous indiquer pourquoi vous aimeriez faire cela? – shahkalpesh

+0

Étiquette avec VB s'il vous plaît. –

Répondre

9

Modifiez le code pour intercepter toutes les exceptions dans un bloc et déterminez le type et le chemin d'exécution à partir de là.

1

Je pense que vous pourriez obtenir le comportement que vous voulez si vous essayez les blocs imbriqués. Une fois qu'une exception est levée, l'exécution passe au bloc catch. Si rien n'est rethrown, il passe finalement à.

3

Vous pouvez appeler des fonctions dans les gestionnaires d'exceptions.

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 
2

Vous n'avez pas spécifié une langue , et je ne sais pas la langue, donc je répondre en général.

Vous ne pouvez pas faire cela. Si vous voulez avoir un code commun, placez-le dans finally, ou si seulement il doit être exécuté pour certains cas, vous pouvez copier ce code dans les cas respectifs. Si le code est plus grand et que vous voulez éviter la redondance, vous pouvez le mettre dans une fonction qui lui est propre. Si cela peut réduire la lisibilité de votre code, vous pouvez imbriquer vos blocs try/catch (au moins en Java et en C++.) Je ne connais pas votre langue. Voici un exemple en 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"); 
     } 
    } 
} 

Cela imprimer:

Hi 1, handling RuntimeException.. 
finally 1 
Hi 2, handling Exception.. 
finally 2 

mettre votre code commun dans le bloc catch externe. Le faire en utilisant la version imbriquée gère également les cas où une exception se produit sans que vous rejetiez explicitement l'ancien dans un bloc catch. Cela peut convenir à ce que vous voulez encore mieux, mais cela peut aussi ne pas l'être.

Questions connexes