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

MATLAB Discussion :

modifier une erreur et rethrow


Sujet :

MATLAB

  1. #1
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut modifier une erreur et rethrow
    Bonjour,

    J'ai une fonction qui lance une erreur.
    Je voudrais modifier cette erreur (prefixer ses identifiant et message) afin qu'elle soit compatible avec un système de nomenclature privé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function err= add_error_mnemonic(err, prefix)
    err.identifier= [prefix':' err.identifier];
    err.message= [prefix':' err.message];
    rethrow(err); % fixme: faut il vraiment rethrow ici ?
    Je recupere malheureusement une erreur matlab
    Setting the 'identifier' property of the 'MException' class is not allowed.
    Du coup j'imagine qu'il va me falloir créer une nouvelle erreur. Mais j'aimerais bien RETHROW. Et j'obtiens la même erreur lorsque j'essaye d'assigner dans err.stack

    Je passe donc à la version suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function err= add_error_mnemonic(err, mnem)
    x=[];
    x.stack= err.stack;
    x.message= [mnem ':' err.message];
    x.identifier= [mnem ':' err.identifier];
    error(x)
    Tout se passe comme prévu, sauf que le debugger s'arrete sur la ligne [error(x)], et non pas au niveau de la stack comme je le souhaiterais.

    Avez vous des idées ?
    Merci d'avance.

  2. #2
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    salut,

    si j'ai bien compris le problème, ce qui pourrait être fait serait de :
    1. dans la fonction add_error_mnemonic, ne pas lancer l'erreur, mais renvoyer en sortie la nouvelle erreur "x"
    2. dans la fonction principale, appeler la fonction "error" avec l'erreur modifiee.


    Ce qui donnerait la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function err2 = add_error_mnemonic(err, mnem)
    err2 = MException([mnem ':' err.identifier], err.message);
    addCause(err2, err);
    Cette fonction pourrait être appelée de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function maFonctionAvecProbleme
    try
       error('lib:myFun', 'basic error message'); % ca plante...
    catch err
       % ajoute un préfixe
       err2 = add_error_mnemonic(err, 'Prefix');
       % relance l'erreur
       throw(err2);
    end
    Pour afficher les infos de la dernière erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >> maFonctionAvecProbleme;
    ??? Error using ==> maFonctionAvecProbleme at 9
    basic error message
    >> MException.last
    ans = 
      MException
      Properties:
        identifier: 'Prefix:lib:myFun'
           message: 'basic error message'
             cause: {}
             stack: [1x1 struct]
    Bon, la différence entre throw et rethrow, c'est pas encore clair pour moi...

    A+

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/04/2015, 23h26
  2. [Débutant] Modifier une TextBox depuis une class [erreur CS0038]
    Par Allan007 dans le forum C#
    Réponses: 4
    Dernier message: 27/05/2012, 10h23
  3. [EasyPHP] une erreur quand j'ouvre mon dossier : il m'est demandé de modifier register_globals
    Par sasaas dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 10/05/2007, 16h34
  4. [procédure PG] Une erreur mystérieuse...ou pas
    Par doohan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/07/2003, 17h16
  5. Ne pas formater une erreur
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 2
    Dernier message: 18/03/2003, 14h13

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