Essayez d'Attraper les blocs à l'intérieur ou à l'extérieur de fonctions et d'erreur de transmission
C'est plus une question de programmation de langue spécifique. J'ai vu plusieurs appraoches d'essayer et de captures.
L'une est à vous de faire ce prétraitement sur les données dont vous avez besoin, appeler une fonction avec les arguments appropriés, et l'envelopper dans un bloc try/catch.
L'autre est de simplement appeler une fonction de transmettre les données et de s'appuyer sur essayez de captures à l'intérieur de la fonction, avec la fonction de retour d'un vrai/faux drapeau si des erreurs s'.
Troisième est une combinaison avec un try catch en dehors de la fonction et de l'intérieur. Toutefois, si les fonctions try catch attrape quelque chose, il le jette à l'autre exception, pour l'essayer, bloc catch en dehors de la fonction de capture.
Toute réflexion sur les avantages/inconvénients de ces méthodes pour le contrôle d'erreur ou si il y a une norme acceptée? Mon googler compétences de ninja ont échoué à me trouver des données précises sur ce point.
Vous devez vous connecter pour publier un commentaire.
En général, une exception ne doit être pris que si elle peut effectivement être traitées.
Il ne fait aucun sens pour attraper une exception pour aucun autre but que de les enregistrer dans un fichier. L'exception est que les exceptions doivent être pris en "haut niveau" de sorte qu'il peut être connecté. Tous les autres code devrait permettre des exceptions à propager le code qui permettra de connecter entre eux.
Je pense que la meilleure façon de penser est en termes de programme de l'état. Vous ne voulez pas un échec de l'opération à des dommages programme de l'état. Ce document décrit le concept de "l'Exception de Sécurité".
En général, vous devez d'abord décider à quel niveau de l'exception de sécurité fonction des besoins de garantie. Les niveaux sont
La Garantie de base signifie simplement que dans le visage d'une exception ou d'une autre erreur, les ressources ne sont pas filtré, le solide garantie dit que le programme de l'etat est restaurée à l'avant de l'exception, et nothrow méthodes ne jamais lancer des exceptions.
Personnellement, j'utilise des exceptions lorsqu'un imprévu, d'exécution de panne. Inattendu signifie pour moi qu'un tel échec ne devrait pas se produire dans le cours normal des activités. D'exécution signifie que l'erreur est due à l'état d'un composant externe en dehors de mon contrôle, par opposition à cause des erreurs de logique de ma part. J'utilise la fonction ASSERT()'s pour attraper les erreurs de logique, et je l'utilise booléenne valeurs de retour pour les erreurs attendues.
Pourquoi? AFFIRMER n'est pas compilé en code de libération, donc je n'ai pas le fardeau de mes utilisateurs avec contrôle d'erreur pour mes propres échecs. C'est ce que les tests unitaires et les ASSERTIONS sont pour. Les booléens parce que lancer une exception peut donner le mauvais message. Des Exceptions peuvent être coûteux, trop. Si je jette des exceptions dans le cours normal de l'exécution de l'application, alors je ne peux pas utiliser le MS débogueur Visual Studio est un excellent "Catch sur levée" exception de la fonctionnalité, où je peux avoir le débogueur pause un programme au point que tout exception est levée, plutôt que la valeur par défaut, ne s'arrêtant au non gérée (blocage) des exceptions.
De voir un de C++ technique pour la Garantie de base, google "RAII" (l'Acquisition de Ressources est Initialiation). C'est une technique où vous envelopper d'une ressource dans un objet dont le constructeur alloue la ressource et whos destructeur libère la ressource. Depuis les exceptions C++ détendre la pile, il garantit que les ressources sont libérées dans le visage des exceptions. Vous pouvez utiliser cette technique pour faire reculer le programme de l'état dans le visage d'une exception. Il suffit d'ajouter un "Commit" de la méthode à un objet, et si un objet n'est pas engagé avant, il est détruit, exécutez le "Rollback" opération qui restaure programme de l'état dans le destructeur.
Chaque "module" dans une application est responsable de la gestion de ses propres paramètres d'entrée. Normalement, vous devriez trouver les problèmes dès que possible, et non pas des ordures à l'autre partie de l'application et de compter sur eux pour être correct. Il y a cependant des exceptions. Parfois, la validation d'un paramètre d'entrée doit essentiellement de réimplanter ce que le destinataire de l'appel est censé faire (par exemple, l'analyse d'un entier) en l'appelant. Dans ce cas, il est généralement approprié d'essayer de l'opération et de voir si cela fonctionne ou pas. En outre, certaines opérations que vous ne pouvez pas prédire leur succès sans les faire. Par exemple, vous ne pouvez pas vérifier de façon fiable si vous pouvez écrire dans un fichier avant d'écrire pour elle: un autre processus peut immédiatement verrouiller le fichier après votre enregistrement.
Il n'existe pas de réel dur et rapide des règles autour de la gestion des exceptions que j'ai rencontré, cependant j'ai un certain nombre de règles générales de base que j'aime à s'appliquer.
Même si certaines exceptions sont gérées de la couche inférieure de votre système, assurez-vous qu'il est un fourre-tout gestionnaire d'exception au point d'entrée de votre système (par exemple, Lorsque vous mettez en place un nouveau Thread (c'est à dire Exécutables), Servlet, MessasgeDrivenBean, serveur de socket, etc). C'est souvent le meilleur endroit pour prendre une décision définitive que la manière dont votre système devrait continuer (journal et de réessayer, sortie avec l'erreur, faire reculer de la transaction)
Ne jamais jeter une exception dans un bloc finally, vous perdrez l'exception d'origine et masque le vrai problème avec une erreur sans importance.
En dehors de qui il dépend de la fonction que vous êtes en œuvre. Êtes-vous dans une boucle, le reste des éléments être retentée ou la liste entière abandonnée?
Si vous renvoyer une exception éviter d'ouvrir une session car il ne fera qu'ajouter du bruit de vos journaux.
En général, je considère que si l'appelant de la méthode que je peut utiliser une exception en quelque sorte (comme, de la récupérer en prenant une approche différente), ou si elle ne fait aucune différence, et tout est faux si l'exception se produit. Ainsi, dans le premier cas, je vais déclarer la méthode de jeter l'exception tandis que dans le second, je vais l'attraper à l'intérieur de la méthode et de ne pas la peine de l'appelant avec elle.
La seule question sur la capture des exceptions est "il n'y a de multiples stratégies pour arriver à quelque chose?"
Certaines fonctions peut être utile d'attraper certaines exceptions et d'essayer d'autres stratégies dans le cas de ces exceptions connues.
Toutes les autres exceptions seront jetés.
Si il n'y a pas toutes les stratégies alternatives, l'exception sera levée.
Rarement voulez-vous une fonction pour récupérer (et en silence) exceptions. Une exception signifie que quelque chose est faux. L'application -- dans son ensemble et doivent être conscients d'exceptions non gérées. Il faudrait au moins du journal, et peut-être même plus: arrêter ou peut-être redémarrer.