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 :

Throw new Exception ?


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 115
    Par défaut Throw new Exception ?
    Bonjour à tous !

    Dans mon programme en C#, je voudrais afficher une exception.
    Le problème, c'est que quand je vais dans le dossier bin de la solution et que je lance mon exécutable de l'application, au lieu de m'afficher mon message d'erreur (mon exception), ça m'affiche que mon application a rencontré une ereur et ça me propose d'envoyer le rapport d'erreur...
    Moi, je voudrais que ça m'affiche mon message... Là, j'ai aucun moyen de savoir ce qui a planté !

    Meric de votre aide !

  2. #2
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    bonjour,
    montre moi tn code

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Par défaut
    Le souci c'est que tu n'as pas englobé le lancement de ton exception dans un try { ... } catch (Exception ex) { ... }

    Donc tu coup ton application plante

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 115
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (privilege.Nom == null | privilege.Nom == "")     
                    throw new Exception("Error Code : 0000 ; Le nom du privilège ne peut pas être nul.");
                else
                    _objAccessPrivilege.CreatePrivilege(privilege);
    Voilà le code... Je n'ai pas englobé d'un Try catch parec que je crée moi-même l'exception. Ce n'est pas une exception que je récupère.

  5. #5
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw new Exception("Error Code : 0000 ; Le nom du privilège ne peut pas être nul.");
    pour le throw si on faut faire une gestion de exception nous même et il se fait dans le code principale alors le code que ta fait n'est pas suffison pour conclure

    + de code slvp

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 115
    Par défaut
    Citation Envoyé par azstar Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw new Exception("Error Code : 0000 ; Le nom du privilège ne peut pas être nul.");
    pour le throw si on faut faire une gestion de exception nous même et il se fait dans le code principale alors le code que ta fait n'est pas suffison pour conclure

    + de code slvp
    ??? Quoi ?

    Tu veux plus de code ? Mais j'ai que ça...

  7. #7
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    rebonjour,

    voila un exemple dee gestion de exception

    par exemple on une fonction qui peut lever une exception

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int goto(int j)
    {
    if (j==0)
    throw exception("j est null")
    else
    return j;
     
    }
    dans le code principale je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void main(...)
    {
     int a=0;
    try
    {
     int b=goto(a);
    }
    catch (exception ex)
    {
    console.writeline(ex.message)
    }
    }
    le catch de main récupère l'exception est affiche le resultat
    si non il peut y'avoir un erreur .............

  8. #8
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    En résumé, quand une exception est lancée, il faut la récupérer si tu veux pouvoir afficher un joli message d'erreur.

    Que tu la code toi même ou pas ne change absolument rien, une exception reste une exception.

    Il te faudra donc recourir au Try Catch afin de capturer l'exception et d'afficher son message via une MessageBox par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    {
        throw new Exception("Message !");
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    Pour info, si tu n'es pas en Windows Forms, MessageBox est disponible dans la dll System.Windows.forms, n'oublie pas de rajouter la référence et le using correspondant.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  9. #9
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    donc il faut un catch qlq part pour récupérer l'exception

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 115
    Par défaut
    Citation Envoyé par laedit Voir le message
    En résumé, quand une exception est lancée, il faut la récupérer si tu veux pouvoir afficher un joli message d'erreur.

    Que tu la code toi même ou pas ne change absolument rien, une exception reste une exception.

    Il te faudra donc recourir au Try Catch afin de capturer l'exception et d'afficher son message via une MessageBox par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    {
        throw new Exception("Message !");
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    Pour info, si tu n'es pas en Windows Forms, MessageBox est disponible dans la dll System.Windows.forms, n'oublie pas de rajouter la référence et le using correspondant.
    J'ai testé cette solution. Effectivement, j'ai un joli mesage d'erreur qui apparait.
    Mais, je voudrais qu'après ça mon application soit inutilisable... Là, le code continue à s'enchainer...
    J'aimerais planter l'application...

    Merci de votre aide !

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    dans le catch tu peux faire un Application.Exit(), ce qui fermera l'application apres le message d'erreur

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Par défaut
    Sauf que si je me mets à la place de l'utilisateur de l'application, ça me ferait bien chier que l'appli plante sans raison apparente.

    Le but des exceptions est justement de permettre au programmeur de récupérer l'erreur et de faire un traitement approprié qui va autant que possible ne pas perturber l'état du programme.

  13. #13
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 201
    Par défaut
    Je crois que pour que ce soit propre, il faut créer une nouvelle exception que tu nomeras bien explicitement.

    Donc tu crées ta classe MyException.

    Au moment ou tu mets "throw" il faut envoyer ton Exception avec un message assez claire question de le retrouver dans tes logs d'erreur.

    Ensuite dans ton bloc "Catch". Tu fais bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try
    {
    }
    catch(MyException ex)
    {
      //Mes actions
    }
    Dans tes actions tu peux par exemple mettre une MessageBox qui renvoie un message à l'utilisateur.

  14. #14
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Citation Envoyé par chaminette Voir le message
    Je crois que pour que ce soit propre, il faut créer une nouvelle exception que tu nomeras bien explicitement.

    Donc tu crées ta classe MyException.

    Au moment ou tu mets "throw" il faut envoyer ton Exception avec un message assez claire question de le retrouver dans tes logs d'erreur.

    Ensuite dans ton bloc "Catch". Tu fais bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try
    {
    }
    catch(MyException ex)
    {
      //Mes actions
    }
    Dans tes actions tu peux par exemple mettre une MessageBox qui renvoie un message à l'utilisateur.
    L'idée est bonne. Mais il ne faut jamais nommer une classe MyQuelqueChose. Si on ne donne pas de nom explicite, on finit par ne plus si retrouver

    Ensuite, si l'exception personnalisée ne dispense qu'un message, qu'on ne lui a pas ajouté de propriétés supplémentaires, à moins qu'on veuille faire un traitement spécifique selon l'exception levée comme le suivant


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    try
    {
    }
    catch(LoginException lex)
    {
        MessageBox.Show("La connexion na échoué.");
    }
    catch(Exception ex)
    {
        logFile.WriteLine("Exception non gérée : \n" + ex.Message);
    }
    Je pense qu'il ne sert à rien de créer une exception personnalisée.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  15. #15
    Rédacteur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 608
    Par défaut
    Citation Envoyé par laedit Voir le message
    Ensuite, si l'exception personnalisée ne dispense qu'un message, qu'on ne lui a pas ajouté de propriétés supplémentaires, à moins qu'on veuille faire un traitement spécifique selon l'exception levée comme le suivant [] Je pense qu'il ne sert à rien de créer une exception personnalisée.
    Je ne le dirais pas comme ça. Je dirais plutôt : soit il existe dans le Framework une exception dont la signification correspond à l'erreur que je veux signaler dans mon code, et donc je l'utilise, soit elle n'existe pas et je crée mon exception, que j'ai besoin de propriétés supplémentaires ou pas.

    Parce que si tu ne crées pas ta propre exception, quand tu l'intercepteras tu ne pourras pas être sûr de la nature du problème. Si tu interceptes Exception, ça peut être n'importe quel problème (problème d'argument, de mémoire, etc ...) puisque toute exception hérite de Exception. Si tu interceptes ApplicationException tu sauras au mieux que c'est ta propre exception, et encore il y a quelques exceptions du framework qui héritent de ApplicationException.

    Il faut toujours lancer l'exception qui correspond exactement au problème, et essayer d'intercepter dans la mesure du possible les exceptions en sachant exactement ce qu'on intercepte, en utilisant plusieurs filtres comme dans ton exemple.

    Tu dis "à moins qu'on veuille faire un traitement spécifique". Mais justement, tu devrais toujours faire un traitement spécifique. Au moins pour les exceptions venant de ton propre code.

    Ouf!

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Par défaut
    D'ailleurs FxCop encourage à faire comme ça, puisqu'il signale comme warnings le fait de catcher Exception / SystemException / ApplicationException directement

  17. #17
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 201
    Par défaut
    Certes mon nommage bn'était pas tres explicite. C'était juste pour relever le fait qu'il ne faut pas intercepter toutes les exception. ça peut être dangereux.

    Je suis tout a fait daccord avec vous sur le fait qu'il ne faut créer une exception que s'il n'en existe pas déja une (qui penserait a créer une MyNullException ? ). Et que l'exception ne sert a rien si on ne la spécifie pas comme il faut.

  18. #18
    Membre éprouvé Avatar de beren.kei
    Inscrit en
    Mai 2008
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2008
    Messages : 135
    Par défaut
    je me demandais... si tu veux simplement récupérer l'erreur, plutot que de générer une exception, si c'est le seul endroit ou tu fais cette manip', lance directement un MessageBox.Show(..)... ca fait pareil que de créer l'exception, puis la récuperer, puis l'écrire dans un messageBox...
    Bien sur, tout dépend de la taille de ton appli et du nombre de fois où tu as ces lignes de codes... à partir de 2 ca vaut le coup de mutualiser

    ++bon codage

  19. #19
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 115
    Par défaut
    Ben en fait, ce que je veux, c'est créer une exception. Je veux que le message de l'exception s'affiche mais, je veux que quand on clique sur OK du messagebox, l'application se ferme : il ne faut surtout pas que le code continue de s'exécuter ! Voilà.... Si quelqu'un a une solution...

  20. #20
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    try
    {
        // Code à risque
        throw new Exception("Oh non ! Une exception !");
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
        Application.Exit();
    }
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. probleme : throw new Exception
    Par anto48_4 dans le forum Langage
    Réponses: 8
    Dernier message: 20/12/2010, 09h24
  2. Throw new exception
    Par pepi22 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 26/05/2009, 00h53
  3. Mauvaise pratique ? throw new exception()
    Par AsPrO dans le forum Langage
    Réponses: 4
    Dernier message: 24/04/2009, 12h36
  4. Réponses: 5
    Dernier message: 25/08/2008, 11h03
  5. Réponses: 7
    Dernier message: 16/02/2007, 00h58

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