IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Comment ne pas rester bloqué sur une exception ?


Sujet :

C++

  1. #1
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Points : 224
    Points
    224
    Par défaut Comment ne pas rester bloqué sur une exception ?
    Bonjour à tous,

    Je travaille actuellement sur un projet de parser XML dans lequel je dois lire des champs XML et rentrer chacune de leurs valeurs dans mon modèle objet C++.

    Le problème se pose lorsqu'une valeur n'a pas été spécifiée : je dois mettre une valeur par défaut correspondant au champ de la valeur inexistante et envoyer un message à l'utilisateur pour lui dire de remplir la valeur du champ incriminé.

    Ainsi, l'utilisateur n'a pas besoin de remplir tous les champs du fichier XML s'il en connaît la valeur par défaut. S'il omet de remplir la valeur, il sera seulement alerté.

    J'ai choisi d'envoyer les messages d'erreur via des exceptions. Il y a peut-être d'autres méthodes, si vous en avez, je vous invite à me les proposer !

    Voici mon pseudo - code pour mieux comprendre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    class XMLData
    {
    	...
     
    protected :
     
    	std::vector<ChampXML> listeChamps;
     
    public :
     
    	remplirListeChamps()
    	{
    		...
    	}
    	getListeChamps()
    	{
    		return listeChamps;
    	}
    }
     
     
    class ParserXML
    {
    protected :
     
    	XMLData* data;
     
    public :
     
    	void lireTousLesChamps
    	{
    		listeChamps = data->getListeChamps();
     
    		for (int i = 0 ; i < listeChamps.size() ; i++)
    		{
    			ChampXML champCourant = listeChamps.at(i);
     
    			if (champCourant.estCorrectementRempli())
    			{
    				parserValeur(champCourant);
    			}
    			else
    			{
    				// monException : ressemble à std::exception mais prend un string en paramètre de message
    				throw monException("Merci de remplir le champ n°" + std::string(i));
    				parserValeurParDefaut(champCourant);
    			}
    		}
    	}
     
    	void run()
    	{
    		try
    		{
    			lireTousLesChamps();
    		}
    		catch(monException e)
    		{
    			std::cout << e.what() << std::endl;
    		}
    	}
    }
    Fonction run() : si lireTousLesChamps() tombe sur une exception, la lecture des champs s'arrête pour traiter l'exception, mais ce n'est pas ce que je veux. Je voudrais que le programme se contente d'envoyer le message d'exception mais en continuant de lire les champs. Y'a-t-il un moyen de traiter l'exception autrement afin que la lecture continue ?

    Merci à tous

  2. #2
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Citation Envoyé par Jimmy91 Voir le message
    Fonction run() : si lireTousLesChamps() tombe sur une exception, la lecture des champs s'arrête pour traiter l'exception, mais ce n'est pas ce que je veux. Je voudrais que le programme se contente d'envoyer le message d'exception mais en continuant de lire les champs. Y'a-t-il un moyen de traiter l'exception autrement afin que la lecture continue ?

    Merci à tous
    Non, ce n’est pas possible. Les exceptions servent justement à ça, casser le flux normal d’exécution du programme. Ici, tu aurais plutôt intérêt, puisque ton but est simplement d’accumuler les erreurs, d’accumuler ces erreurs dans un vector, que tu retournerais en sortie de ta fonction.

  3. #3
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Points : 224
    Points
    224
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Non, ce n’est pas possible. Les exceptions servent justement à ça, casser le flux normal d’exécution du programme. Ici, tu aurais plutôt intérêt, puisque ton but est simplement d’accumuler les erreurs, d’accumuler ces erreurs dans un vector, que tu retournerais en sortie de ta fonction.
    Bonne idée. Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ne pas rester bloqué sur un connect
    Par gigiskhan dans le forum Réseau
    Réponses: 12
    Dernier message: 16/11/2009, 22h58
  2. Réponses: 9
    Dernier message: 19/12/2007, 15h42
  3. Réponses: 7
    Dernier message: 25/08/2006, 17h31
  4. rester bloqué sur une zone de texte
    Par Pitou5464 dans le forum Access
    Réponses: 3
    Dernier message: 18/08/2006, 18h56
  5. comment faire fonctionner l'exe sur une autre machine
    Par brian79 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/05/2004, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo