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 :

Annuler une exception dans un While


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut Annuler une exception dans un While
    Bonjour,

    Je cherche un moyen "propre" pour annuler une exception dans un While et continuer le traitement.

    Mon code ressemble à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    While ()
    {
    ... Mes instructions
    }
    catch (...)
    {
     ... Inscrit exception dans une log
     ==> 'Reprend le traitement While à l''occurence suivante'
    }
    Le catch est indispensable pour remonter l'erreur et l'inscrire dans une log, mais je souhaite continuer le traitement. En effet je boucle sur plusieurs centaines de milliers d'enregistrements dans mon While et il ne doit pas s'arrêter si un pb survient sur 1 seul enreg en plein milieu par exemple. Néanmoins l'info du plantage doit être tracé pour pouvoir relancer le traitement uniquement sur l'enreg qui a posé pb.

    Une idée ?

    Merci d'avance,

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    mets le try/catch dans le while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while (condition)
    {
        try
        {
            // ... Mes instructions
        }
        catch(...)
        {
            // ... Inscrit exception dans une log
            // ==> 'Reprend le traitement While à l''occurence suivante'
        }
    }

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Par défaut
    Enfin si tu 'catch' a tous les coups et que tu continue, ton exception est inutile.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    While(condition)
    {
      if(doJob() == ERROR)
      {
         log();
      }
    }
    Après il est possible que tu passe par une library externe qui envoie une exception, mais sauf contrainte forte de ce genre, il vaut mieux éviter les levées d'exceptions inutiles.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 148
    Par défaut
    tomlev => Le programme va quand même s’arrêter dans le catch je me trompe ?

    EDIT : Merci de la précision Nathanael

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Si tu ne fais pas de throw dans le catch non il continuera la boucle

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut
    ok merci à vous, je vais effectivement tenter de mettre le try/catch dans le while... J'avais pas pensé à cela effectivement.

    Je relance et je vois

    Merci !

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Par défaut
    Oui mais ce n'est pas la solution 'propre' comme tu le demandais en début de post.

  8. #8
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    J'arrive un peu tard sur ce sujet, mais je ne suis pas d'accord avec l'emploi du code de retour.
    Si tu as une méthode qui retourne une List<zozo>, comment tu fais avec ton code de retour ?
    Tu passes l'un ou l'autre en paramètre out ? Ou tu utilises le type de retour "tuple" du 4.0 ? Ou tu fais - comme j'ai été obligé de le faire sur un de mes projets - une classe de retour contenant des erreurs, et des types de retour via héritage ?

    S'il y a une exception, c'est qu'un truc ne va pas. Il faut la gérer ad hoc ou la propager... c'est le but de l'exception en POO.
    Maintenant, les exceptions (catch) étant un peu coûteux en perf, il faut les utiliser à bon escient (euh j'ai un doute sur l'orthographe là !).

    J'ai eu, dans ce même projet, l'occasion de faire un foreach (ce qui fini en while un fois compilé ) qui récupérait des tas de retours de méthodes avec des exceptions... qui au final servaient à construire des logs et impliquait des traitements particuliers pour pallier au problème rencontré...

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/01/2009, 10h49
  2. Réponses: 3
    Dernier message: 29/05/2006, 23h46
  3. Annuler une insertion dans un Trigger
    Par dreamanoir dans le forum Oracle
    Réponses: 2
    Dernier message: 10/01/2005, 13h04
  4. Réponses: 2
    Dernier message: 28/08/2003, 00h00

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