Est-il toujours d'accord pour intercepter une exception et ne rien faire?
try
{
CallMethod()
}
catch { }
De mon expérience, en général, je ne ferais pas cela.
Mais si j'avais un morceau de fonctionnalités que dire, utilise une 3ème partie COM de l'assemblée qui, à l'occasion échoue et il n'est effectivement pas assez important pour se connecter il cause je vais l'appeler de nouveau dans quelques secondes, de toute façon, est-il normal de le faire?
Si non, quelles alternatives?
Le sujet lié à la peine de lire: softwareengineering.stackexchange.com/questions/16807/...
OriginalL'auteur Diskdrive | 2011-04-28
Vous devez vous connecter pour publier un commentaire.
Un vide bloc catch comme celle ci ne doit pas être utilisé.
Par exemple, le code dans votre question peut également prendre OutOfMemoryException, StackOverflowException, ExecutionEngineException, AccessViolationException et ThreadAbortException (bien que ce dernier serait renvoyé à la fin du bloc catch). Il serait même attraper des objets qui ne découle pas de Système.Exception (rare, mais possible dans le C++ et JavaScript...dans le CLR, n'importe quel objet peut être "jeté", mais en C# vous limite à l'Exception des types dérivés).
Si, dans votre exemple, vous utilisez une 3ème partie de l'objet COM que de temps en temps échoue et que vous ne se soucient pas de ces échec, vous devez plutôt catch (COMException) {}, ainsi que d'autres plus graves défaillances "bulle" et peut être enregistré et/ou fixe.
Il est important pour attraper les exceptions que vous pouvez réellement faire quelque chose (dans ce cas, vous êtes explicitement le choix de ne rien faire sur les exceptions découlant de CallMethod(), et je suis d'accord qu'un commentaire doit être ajoutée pour indiquer que cette décision de conception). En suivant ce guide, vous empêchez les autres bugs et les problèmes dans le code ou l'environnement d'exécution de passer inaperçue.
En fait l'exception OutOfMemoryException, AccessViolationException etc. ne sont pas gérées par try..catch comme ils signifient l'état corrompu. Pour en savoir plus: stackoverflow.com/questions/3469368/...
OriginalL'auteur M. Shawn Dillon
Sûr il y a des fois, mais ils doivent être extrêmement rares.
Vos meilleures pratiques dans ces cas est de laisser un commentaire dans le bloc catch pour s'assurer qu'il est clair qu'il est intentionnellement en blanc.
Et depuis que je l'ai vu à quelques reprises, dans l'idéal, il n'est pas un commentaire qui dit
// do nothing
... dire pourquoi devriez-vous être de ne rien faire...OriginalL'auteur STW
En règle générale, vous souhaitez concevoir votre code pour gérer les erreurs, d'une certaine façon.
Cela dit, si vous êtes prêt à gérer les conséquences de ne pas en silence, aller de l'avant.
OriginalL'auteur Matt Kline
J'aurais au moins le journal de l'accident avec un "Avertissement" ou de niveau inférieur dans le bloc catch, de sorte que vous pouvez toujours activer la journalisation et de voir ce qui se passe si vous en avez besoin.
J'ai pensé à propos de la journalisation, mais pour vous dire la vérité, il n'a probablement échouer environ 10% du temps. Je sens la journalisation il vient de submerger le journal avec beaucoup d'inutiles les entrées. Je pense que je vais peut-être mettre un compteur de là-bas et peut-être que si elle ne parvient pas à 100 fois dans une ligne ou quelque chose, je vais l'enregistrer comme un problème...
Ouais. J'irai même plus loin et journal d'exception à un niveau faible comme "FINE", et le journal "100 fois dans une rangée" de l'événement à une "ERREUR" ou "AVERTISSEMENT". Puis désactivez "FINE" au niveau de la production. Suppose que j'ai eu ma part de problèmes avec s'attendre à des Exceptions aller sauvages.
OriginalL'auteur Anthony Accioly
Votre troisième composant de partie d'échec. Comment est-il échouer? Elle ne répond en rien à une constante prévisible (bien que erratique dans le calendrier)? Avez-vous un
TakingABreakException
? Si oui, prenez le prévisible exception, faire tout ce que vous aurez avec elle, document, etc., et laisser tout le reste de la bulle jusqu'.Ne pas fourre tout, si vous pouvez prendre le un chose que vous savez arrive de temps en temps. Ce qui pourrait être la rupture maintenant pourrait ne pas être le troisième composant de partie, ou il pourrait être de se comporter mal, parce que d'une entrée que vous avez utilisé. Ces choses ne doivent pas être avalé.
En aucun cas jamais? Ensuite, vous document. Mais je préfère l'espoir que les échecs, tout n'est pas évitable, aurait prévisible signature. Mais comme toujours, il est de votre demande, nous sommes juste fauteuil quarts d'essayer d'offrir des conseils avisés pour vous et d'autres personnes ayant les mêmes préoccupations.
Merci, oui, c'est une situation bizarre. La COM de l'assemblée s'appuie sur les ressources du réseau (AD). Oh, et peut-être de l'orbite de Jupiter et de Saturne à aligner. Je pourrais peut-être capturer quelques scénarios, mais ne serait pas assez confiant pour dire que j'ai capturé tous les possibiltiies
OriginalL'auteur Anthony Pegram
Je crois que c'est toujours une bonne idée d'attraper une exception, surtout les plus spécifiques exception si vous savez ce que c'est. J'ai couru dans d'innombrables bugs qui n'ont jamais été pris parce que, le code a couru tout droit à travers le hic, car il a été laissé vide ou quelqu'un a mis un retour là-bas.
OriginalL'auteur Xaisoft