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

Langage Delphi Discussion :

[Exception] Propagation des exceptions


Sujet :

Langage Delphi

  1. #1
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut [Exception] Propagation des exceptions
    Utilisant très rarement les exceptions personnalisées et la propagation de celle-ci d'une procédure à une autre., j'aimerai savoir si je ne fais pas fausse route sur la propagation de ces dernières.

    Voici l'exception personnalisée (rien de bien compliquer ^^)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Type EAuthNotFound = class(Exception)
    Voici la fonction principale sur laquel je voudrais réceptionner l'exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure MaProcedurePrincipale; 
    begin
      Try
         MaProcedureSecondaire 
      Except 
        On E:EAuthNotFound do
        begin
          Showmessage('l''erreur est : ' + E.Message);
        end;
        On E:Exception do
          raise;
      end;
    end;
    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
     
    procedure MaProcedureSecondaire;
    begin
      try
        if Mafunction then
          Showmessage('Fini');
      Except
        On E:EAuthNotFound do
        begin
          // Est on obligé de faire comme ca pour que cette exception se propage ?
          raise EAuthNotFound.Create(E.Message);
        end;
        On E:Exception do raise;
      end;
    end;
    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
     
    function Mafunction : Booelan;
    begin
      try
        //récupération d'informations d'un fichier Xml
        Case StrToIntDef((Noeud.Text),-1) of
           -1: Raise EAuthNotFound.Create('No Auth Found'); // erreur
            0: Result := True;
            else
               Result := False;
            end;
        end;
      Except
          on E:EAuthNotFound do
          // Est on obligé de faire comme ca pour que cette exception se propage ?
            raise EAuthNotFound.Create(E.Message);
     
        on E:Exception do
          Raise Exception.Create('Error MaFunction : ' + E.Message);
      end;
    end;
    J'ai essayé en utilisant un simple Raise, mais l'exception en elle même n'est pas transmise (EAuthNotFound) et passe par le gestionnaire d'exception commun (E:Exception).

    Est ce correcte ou existe-t-il une autre solution ?

    Merci ^^
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Ce code me semble plus juste égard à ta demande.

    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
     
    procedure MaProcedurePrincipale;
    begin
      Try
         MaProcedureSecondaire
      Except
        On E : EAuthNotFound do ShowMessage('Exception (EAuthNotFound) : ' + E.Message);
        On E : Exception do ShowMessage('Exception (Exception) : ' + E.Message);
      end;
    end;
     
     
    procedure MaProcedureSecondaire;
    begin
      try
        if Mafunction then
          Showmessage('Fini');
      Except
        Raise;
      end;
    end;
     
    function Mafunction : Boolean;
    const
       Noeud = '50';
    begin
       try
        Case StrToIntDef(Noeud,-1) of
           -1: Raise EAuthNotFound.Create('No Auth Found'); // erreur
            0: Result := True;
        else
          Result := False;
        end;
     
       // StrToInt('ss');
       Except
          on EAuthNotFound do Raise;
          on E : Exception do Raise Exception.Create('Error MaFunction : ' + E.Message);
       end;
    end;

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Bon en fait j'ai trouvé d'où venait le problème ^^

    Si j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      On E : Exception do ShowMessage('Exception (Exception) : ' + E.Message);
      On E : EAuthNotFound do ShowMessage('Exception (EAuthNotFound) : ' + E.Message);
    E:Exception sera toujours passé en priorité

    Il faut donc mettre les exceptions spécifique avant l'exception globale.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    de rien.

  5. #5
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par Malatar
    Il faut donc mettre les exceptions spécifique avant l'exception globale.
    Exactement.

    En outre, ceci est totalement inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    on E : Exception do raise;
    Il suffit de ne rien mettre du tout : toute exception non gérée est "propagée" telle quelle.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par sjrd
    Exactement.
    CA fait plusieurs heures que je cherchais pourquoi
    Vu que c'est la première fois que j'utilise les Exceptions persos, mais bon ca rentre ^^

    Citation Envoyé par sjrd
    En outre, ceci est totalement inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    on E : Exception do raise;
    Il suffit de ne rien mettre du tout : toute exception non gérée est "propagée" telle quelle.
    C'était pour l'exemple ^^
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

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

Discussions similaires

  1. Propagation des exceptions
    Par GPZ{^_^} dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2009, 12h20
  2. Des exceptions ,que des exceptions
    Par katebe dans le forum Applets
    Réponses: 6
    Dernier message: 14/04/2009, 11h00
  3. [Exception]Gestion des exceptions
    Par dguenard dans le forum Général Java
    Réponses: 6
    Dernier message: 11/09/2005, 13h18
  4. [Exception]Gestion des exceptions, capture sur la classe.
    Par @lantis dans le forum Général Java
    Réponses: 9
    Dernier message: 22/07/2005, 19h43
  5. [Exception]Affichage des exceptions
    Par Guybrush dans le forum Général Java
    Réponses: 2
    Dernier message: 11/01/2005, 14h51

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