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 :

PB avec un switch de fonctions en Python [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Consultant finance des marchés
    Inscrit en
    Décembre 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant finance des marchés

    Informations forums :
    Inscription : Décembre 2018
    Messages : 30
    Par défaut PB avec un switch de fonctions en Python
    Bonsoir,

    Qu'est ce que je fais de mal avec ce switch: Lorsque je lui passe la key RBC il rentre dans la fonction ALLIANZ...

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
        def case_select(self, key, x, attachments):
            print("key:",key)
            switcher = {
                "ACTIAM": self.ACTIAM(x, attachments),
                "ALAHLI": self.ALAHLI(x, attachments),
                "ALLIANZ": self.ALLIANZ(x, attachments),
                "BAWAG": self.BAWAG(x, attachments),
                "BAYER": self.BAYER(x, attachments),
                "BBH_AAM": self.BBH_AAM(x, attachments),
                "BBH_AMUNDI_EURO_IG": self.BBH_AMUNDI_EURO_IG(x, attachments),
                "GENERALI_FONDACO": self.GENERALI_FONDACO(x, attachments),
                "NTMA": self.NTMA(x, attachments),
                "BONY_ERASMUS": self.BONY_ERASMUS(x, attachments),
                "RENAISSANCE": self.RENAISSANCE(x, attachments),
                "STANLIB": self.STANLIB(x, attachments),
                "CITI": self.CITI(x, attachments),
                "CITI_MM_GLOBAL": self.CITI_MM_GLOBAL(x, attachments),
                "CREDIT_SUISSE": self.CREDIT_SUISSE(x, attachments),
                "DEAM": self.DEAM(x, attachments),
                "DEKA": self.DEKA(x, attachments),
                "MIRAE": self.MIRAE(x, attachments),
                "HELABA": self.HELABA(x, attachments),
                "INKA": self.INKA(x, attachments),
                "JP_MORGAN": self.JP_MORGAN(x, attachments),
                "SANTANDER": self.SANTANDER(x, attachments),
                "KASIKORN": self.KASIKORN(x, attachments),
                "KGI": self.KGI(x, attachments),
                "LOMBARD": self.LOMBARD(x, attachments),
                "METZLER": self.METZLER(x, attachments),
                "MITSUBISHI": self.MITSUBISHI(x, attachments),
                "MUFG": self.MUFG(x, attachments),
                "MIZUHO": self.MIZUHO(x, attachments),
                "BCCH": self.BCCH(x, attachments),
                "NOMURA": self.NOMURA(x, attachments),
                "NORDLB": self.NORDLB(x, attachments),
                "AMUNDI_ESG_Poches": self.AMUNDI_ESG_Poches(x, attachments),
                "PREVINET": self.PREVINET(x, attachments),
                "RBC": self.RBC(x, attachments),
                "MONTECUCCOLI": self.MONTECUCCOLI(x, attachments),
                "UNIVERSAL": self.UNIVERSAL(x, attachments),
                "ETHICA": self.ETHICA(x, attachments),
                "BONY": self.BONY(x, attachments),
                "HSBC": self.HSBC(x, attachments),
                "PSI_GLOBALE_AKTIER": self.PSI_GLOBALE_AKTIER(x, attachments)
            }
            switcher.get(key)
            return None
     
        def ACTIAM(self, x, attachments):
            return None
     
        def ALAHLI(self, x, attachments):
            return None
     
        def ALLIANZ(self, x, attachmentFileName):
            CodeComptable = attachmentFileName.split("_")[0]
            return None
    Voici le message d'erreur:

    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
    Macro to call: RBC
    subject: AMUNDI Daily NAV 07302021 - ARMS, AGET & AMVT
    key: RBC
    <COMObject <unknown>>
    Traceback (most recent call last):
      File "C:/Users/giraudl/PycharmProjects/Automatization_PDP/main.py", line 696, in <module>
        GestionBoitePDP.get_mail_print_to_csv()
      File "C:/Users/giraudl/PycharmProjects/Automatization_PDP/main.py", line 583, in get_mail_print_to_csv
        self.case_select(macro_to_call,x,attachments)
      File "C:/Users/giraudl/PycharmProjects/Automatization_PDP/main.py", line 51, in case_select
        "ALLIANZ": self.ALLIANZ(x, attachments),
      File "C:/Users/giraudl/PycharmProjects/Automatization_PDP/main.py", line 102, in ALLIANZ
        CodeComptable = attachmentFileName.split("_")[0]
      File "C:\ProgramData\Anaconda3\envs\Automatization_PDP\lib\site-packages\win32com\client\dynamic.py", line 527, in __getattr__
        raise AttributeError("%s.%s" % (self._username_, attr))
    AttributeError: <unknown>.split

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    quand tu déclares ton dico switcher tu exécutes chacune des fonctions, la valeur de chaque clé n'est donc pas la fonction à appeler mais le résultat de la fonction appelée

    une tournure de ce style serait peut-être plus adéquate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        def case_select(self, key, x, attachments):
            print("key:",key)
            {   "ACTIAM": self.ACTIAM,
                "ALAHLI": self.ALAHLI,
                "ALLIANZ": self.ALLIANZ,
                (...)
                "RBC": self.RBC,
                "MONTECUCCOLI": self.MONTECUCCOLI,
                (...)
            }[key](x, attachments)
            return None
    en outre -et c'est ce qui semble vautrer le programme- ta fonction self.ALLIANZ prend en paramètre non pas un attachments mais un attachmentFileName (donc une chaine à priori, qui subit un split) :


    Citation Envoyé par Curveater Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        def ALLIANZ(self, x, attachmentFileName):
    (...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      File "C:/Users/giraudl/PycharmProjects/Automatization_PDP/main.py", line 51, in case_select
        "ALLIANZ": self.ALLIANZ(x, attachments),

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    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 716
    Par défaut
    Salut,

    Quitte à vous être appliqué à avoir des noms de méthodes alignés sur les "clefs", autant utiliser {has|get|set|del}attr:
    Ce qui réduit le code à getattr(self,key)(x, attachments).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre averti
    Homme Profil pro
    Consultant finance des marchés
    Inscrit en
    Décembre 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant finance des marchés

    Informations forums :
    Inscription : Décembre 2018
    Messages : 30
    Par défaut PB Résolu
    Merci pour votre aide, le pb est résolu.

    Ludovic

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

Discussions similaires

  1. Fonction avec 3 switch ou if else selon le navigateur employé
    Par patricktoulon dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 13/02/2018, 23h44
  2. Comment fait ça avec les pointeurs, la fonction et les struc
    Par mahdianis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/02/2006, 18h01
  3. [Système] Probleme avec un switch case!
    Par Death83 dans le forum Langage
    Réponses: 7
    Dernier message: 29/01/2006, 16h28
  4. Switch dans fonction membre
    Par Raish dans le forum C++
    Réponses: 11
    Dernier message: 30/03/2005, 14h41
  5. Problème avec les touches CTRL & FONCTIONS
    Par bidule999 dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 03/12/2004, 09h52

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