103 votes

Try-catch multiple ou un?

Normalement, je ferais ceci:

 try
{
    code

    code that might throw an anticipated exception you want to handle

    code

    code that might throw an anticipated exception you want to handle

    code
}
catch 
{

}
 

Y a-t-il des avantages à le faire de cette façon?

 code

try
{
    code that might throw an anticipated exception you want to handle
}
catch
{
}

code

try
{
    code that might throw an anticipated exception you want to handle
}
catch
{
}

code
 

Mise à jour:

J'ai initialement posé cette question avec une référence à C #, mais comme l'a fait remarquer A. Levy, elle pourrait s'appliquer à n'importe quel langage de gestion des exceptions, j'ai donc fait en sorte que les balises reflètent cela.

119voto

Jamie Ide Points 28680

Ça dépend. Si vous souhaitez fournir une gestion spéciale pour des erreurs spécifiques, utilisez plusieurs blocs catch:

 try
{ 
    // code that throws an exception
    // this line won't execute
}
catch (StackOverflowException ex)
{
    // special handling for StackOverflowException 
}
catch (Exception ex)
{
   // all others
}
 

Si, cependant, l'intention est de gérer une exception et de continuer à exécuter, placez le code dans des blocs try-catch distincts:

 try
{ 
    // code that throws an exception

}
catch (Exception ex)
{
   // handle
}

try
{ 
    // this code will execute unless the previous catch block 
    // throws an exception (re-throw or new exception) 
}
catch (Exception ex)
{
   // handle
}
 

20voto

Darin Dimitrov Points 528142

Si je pouvais choisir la seconde, je séparerais probablement cela en deux fonctions.

11voto

Ed S. Points 70246

Ni l'un ni l'autre, utilisez simplement plusieurs blocs catch pour des exceptions spécifiques (sauf s'il y a juste une tonne de code dans le bloc et seulement quelques lignes peuvent lever une exception. Dans ce cas, j'irais avec la deuxième méthode).

11voto

Zack Points 44583

Vous êtes en train de penser à propos de ce dans le mauvais sens. Que devez-vous faire dans votre blocs catch? Si vous souhaitez récupérer à partir de l'une quelconque des exceptions possibles par l'exécution du même code, peu importe l'opération qui a déclenché l'exception, puis utilisez un bloc catch. Si vous avez besoin de faire différentes opérations de nettoyage en fonction de l'opération qui a jeté, puis utiliser plusieurs blocs catch.

Aussi, si vous pouvez utiliser try/finally ou le RAII motif au lieu de try/catch, alors vous devriez.

5voto

EKS Points 2540

La deuxième méthode est meilleure à mon avis car elle vous permet de piéger les erreurs avec plus de précision.

L'enveloppement de tout votre code dans un gros bloc try / catch est également mauvais, si votre application a une sorte de problème et qu'elle se bloque, mais puisque vous avez piégé une grosse exécution générique, les chances que vous puissiez la gérer correctement sont plus faibles. Vous devriez avoir des parties spécifiques à l'intérieur de try catch, comme si vous lisiez un fichier ou preniez une entrée utilisateur. De cette façon, vous pouvez mieux gérer cette exception

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X