49 votes

Existe-t-il une raison valable de ne jamais ignorer une exception interceptée?

Wow, je viens de rentrer d'un énorme projet en C# à partir de externalisé développeurs et en passant par mon examen de code de mon outil d'analyse a révélé des grappes de ce qu'il considérait comme les mauvaises choses. L'un des plus décourageant messages:

Exceptions.DontSwallowErrorsCatchingNonspecificExceptionsRule  : 2106 defects

Les développeurs de m'assurer qu'ils avaient une bonne raison pour tous les vides, les blocs catch, que, parfois, l'essayer avec vide blocs catch sont juste là pour ignorer inutile d'exceptions et de garder l'application de s'écraser. J'ai l'impression que c'est un flic et complète BS. Certains des exemples que j'ai effectivement regardé les bases de données des appels où le record a été enregistrée à la base de données, et dans ce cas, si une exception a été ignorée, l'utilisateur doit obtenir un accord rapide, pense que tout allait bien, et de continuer leur travail. En réalité, leur travail n'a jamais été enregistré. Je pense que c'est absolument la plus horrible genre d'erreur. Dans ce cas, ils ont complètement tort dans le fait de lancer ce code dans un essai à vide du bloc catch. Mais ma question est, "est-ce acceptable pour n'IMPORTE quelle situation?" Je ne pense pas, mais j'ai été connu pour être mauvais.

55voto

rjzii Points 8979

Bien qu'il existe des motifs raisonnables pour ne pas tenir compte des exceptions; cependant, il est généralement seules exceptions spécifiques que vous pouvez ignorer en toute sécurité. Comme indiqué par Konrad Rudolph, vous pourriez avoir à les attraper et de les avaler une erreur en tant que partie d'un cadre; et, comme noté par osp70, il pourrait y avoir une exception générée par un cadre qui vous savez que vous pouvez ignorer.

Dans ces deux cas cependant, vous le savez probablement le type d'exception et si vous connaissez le type, alors vous devriez avoir un code semblable au suivant:

try {
  // Do something that might generate an exception
} catch (System.InvalidCastException ex) {
  // This exception is safe to ignore due to...
} catch (System.Exception ex) {
  // Exception handling
}

Dans le cas de votre application, est sonne comme quelque chose de similaire pourrait s'appliquer dans certains cas; mais l'exemple que vous donnez d'une base de données enregistrer le retour d'un "OK", même quand il y a une exception n'est pas un très bon signe.

16voto

itsmatt Points 18905

Je ne prends pas les exceptions à moins que je prévoie de faire quelque chose à leur sujet. Les ignorer ne fait rien contre eux.

12voto

Maxime Rouiller Points 5987

J'utilise parfois cela dans un WebControl qui n'est pas obligatoire pour une page à afficher et que si cela échoue, je ne veux pas empêcher la page de s'afficher (publicités à titre d'exemple).

Cependant, je note l'erreur. Je ne la rejette tout simplement pas.

11voto

Clayton Points 841

Mon sentiment est que tout Catch Block vide a besoin d'un commentaire.

Peut-être est-il valide d'ignorer certaines erreurs, mais vous devez documenter vos raisons.

En outre, vous ne voudriez pas en faire un générique "catch (Exception e) {}".

Vous ne devez détecter que le type d'erreur spécifique prévu et ignoré sans risque.

8voto

Cruachan Points 11749

Généralement non, en fait pas dans 99% des cas, MAIS

Il y a des exceptions. Un projet, j'ai travaillé sur, nous avons utilisé une bibliothèque tierce pour gérer un périphérique TWAIN. Il était bogué et sous certaines combinaisons matérielles jeter un pointeur null erreur. Cependant nous n'avons jamais trouvé aucun cas il n'a pas à gérer pour numériser le document avant qu'il ne soit, pour la capture de l'exception a été entièrement rationnelle.

Donc je pense que si c'est ton code qui est jeter l'exception, alors vous devriez toujours vérifier, mais si vous êtes coincé avec la troisième partie du code ensuite, dans certaines circonstances, vous pouvez être forcé de manger de l'exception et de progresser.

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