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

Python Discussion :

Récupérer une erreur d'appel d'une méthode inexistante d'une classe


Sujet :

Python

  1. #1
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut Récupérer une erreur d'appel d'une méthode inexistante d'une classe
    Bonjour,
    j'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/env python
     
    class skeleton():
        def __init__(self):
            self.oki = None
     
        def special(self):
            print('Spécial')
     
    a = skeleton()
    a.special()
    a.erreur()
    Il me renvoie comme prévu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Spécial
    Traceback (most recent call last):
      File "/Users/cbal/Documents/bazar/unknowMethod.py", line 12, in <module>
        a.erreur()
    AttributeError: 'skeleton' object has no attribute 'erreur'
    Je voudrais avoir une méthode qui me permettrait de récupérer proprement le nom de la classe et de la méthode qui n'existe pas.

    Toute info. est bienvenue.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    idée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/env python
    try:
        a.erreur()
    except AttributeError as e:
        # cuisiner le message skeleton object has no attribute 'erreur'
        # contenu dans 'e'
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Oups... Pas de souci pour cette méthode. J'aurais dû indiquer que je la connaissais. C'est cette façon que je nommerais pas propre.

  4. #4
    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
    Ben il n'y en a pas d'autre. Sauf si tu peux définir la méthode __getattr__ dans la classe skeleton. Alors tu peux déclencher une exception sous-classée de AttributeError, qui a des attributs.

    Mais ça me semble pas forcément plus propre.

    C'est quoi le but final ? À mon avis il y a un problème à résoudre en amont de ceci.
    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.

  5. #5
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Citation Envoyé par sjrd Voir le message
    C'est quoi le but final ? À mon avis il y a un problème à résoudre en amont de ceci.
    Dans le cadre d'un logiciel pour m'aider à taper mes documents scientifiques, j'ai mis au point un langage de programmation simplifié. Je vais créer un module qui traduira ce langage simplifiée en du code Python. Charge à Python de tester que le programme fonctionne.

    Par exemple, le code pour un graphique dans le document pourra ressembler à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    axe(xy)
        .range = -5 ; 5 | -5 ; 5
        .color = blue
    L'équivalent Python sera de la forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    newAxe = monModuleSpecialise.axe(xy)
    newAxe.range("-5" , "5" , "-5" , "5")
    newAxe.color("blue")
    Citation Envoyé par sjrd Voir le message
    Ben il n'y en a pas d'autre. Sauf si tu peux définir la méthode __getattr__ dans la classe skeleton. Alors tu peux déclencher une exception sous-classée de AttributeError, qui a des attributs.

    Mais ça me semble pas forcément plus propre.
    Cela m'intéresse. Peux-tu présicer via un mini-exemple ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    sjrd doit parler d'un truc comme çà

    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
    class MyAttributeError(AttributeError):
        def __init__(self, cls, key):
            self._cls = cls
            self._key = key
     
    class skeleton():
        def __init__(self):
            self.oki = None
     
        def special(self):
            print('Special')
        def __getattr__(self, key):
            raise MyAttributeError(self.__class__, key)
    a = skeleton()
    a.special()
    try:
        a.erreur()
    except AttributeError as e:
        print '%s, %s' % (e._cls.__name__, e._key)
    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Super.

Discussions similaires

  1. [AC-2007] Erreur 0 et Comment trouver l'origine d'une erreur ?
    Par tibofo dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/01/2010, 21h04
  2. Réponses: 13
    Dernier message: 29/06/2007, 18h03
  3. [Applet] appel de la méthode stop() dans une applet
    Par ciol2.6.12 dans le forum Applets
    Réponses: 4
    Dernier message: 08/09/2005, 13h40
  4. [Interface] Appeller toutes les méthodes héritées d'un class
    Par thibaut.d dans le forum Général Java
    Réponses: 4
    Dernier message: 25/01/2005, 08h42

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