Partage
  • Partager sur Facebook
  • Partager sur Twitter

SyntaxError: keyword can't be an expression

Sujet résolu
    18 octobre 2016 à 20:45:57

    Bonjour,

    Je commence le TP sur un dictionnaire ordonné du cours de Python. Je commence ma classe et je définis un __init__ :

    def DictionnaireOrdonne():
    
        def __init__(self, dictEnvoye={}, **cles_valeurs):
            """Constructeur prenant comme argument un dictionnaire
            ou une info cle/valeur  de type : cle = valeur"""
    
            if dictEnvoye != {}:
                for cle, valeur in dictEnvoye:
                    self.liste_cle=cle
                    self.liste_valeur=valeur
            
            elif len(cle_valeurs!=0):
                for cle, valeur in cle_valeurs:
                    self.liste_cle=cle
                    self.liste_valeur=valeur



    J'essaye donc rapidement mon programme pour voir si tout marche, et justement, tout ne marche pas.

    >>> dico = DictionnaireOrdonne()
    >>> dico = DictionnaireOrdonne("cle1"=1, 2="valeur2")
    SyntaxError: keyword can't be an expression

    Quelqun pourrait m'aider ? J'ai pourtant bien passer un argument de type **arg.

    Cordialement.

    -
    Edité par MagolleS 18 octobre 2016 à 20:48:09

    • Partager sur Facebook
    • Partager sur Twitter
      18 octobre 2016 à 21:08:17

      Bonsoir, quand tu appelles une fonction (ou une classe) tu ne peux pas donner en argument des expressions (expressions incorrectes ici qui plus est)

      quand tu as une fonction avec **kwargs, le simple fait de donner des arguments avec un keyword et une valeur assigne de la bonne manière les clés et valeurs dans kwargs. Exemple pour mieux me faire comprendre ^^ :

      def foo(**kwargs):
          print(kwargs)
      
      foo(a=2, b=3, c=18)

      pas besoin de mettre "a", cela se fait automatiquement. Car de toute manière: "a"=2 est une expression incorrecte (on ne pas assigner à une string une valeur, ce n'est pas une variable)

      • Partager sur Facebook
      • Partager sur Twitter
      Si je suis tête en l'air, c'est par habitude de viser le sommet
        18 octobre 2016 à 21:14:51

        Merci de ton aide, seulement je me retrouve maintenant avec une autre erreur :

        >>> dico = DictionnaireOrdonne(cle1= "valeur1", cle2 = "valeur2")
        Traceback (most recent call last):
          File "<pyshell#3>", line 1, in <module>
            dico = DictionnaireOrdonne(cle1= "valeur1", cle2 = "valeur2")
        TypeError: DictionnaireOrdonne() got an unexpected keyword argument 'cle1'

        Je comprend pas.

        Merci

        • Partager sur Facebook
        • Partager sur Twitter
          18 octobre 2016 à 21:25:17

          C'est parce que tu as définit DictionnaireOrdonne comme une fonction au lieu d'une classe. Or en tant que fonction, les parenthèses vident correspondent à aucun argument.

          -
          Edité par WexyR 18 octobre 2016 à 21:25:42

          • Partager sur Facebook
          • Partager sur Twitter
          Si je suis tête en l'air, c'est par habitude de viser le sommet
            18 octobre 2016 à 21:42:03

            Wow merci,

            maintenant que je me rend compte je me dis que l'erreur etait vraiment bete.

            En tout cas merci pour ton aide !

            • Partager sur Facebook
            • Partager sur Twitter
              18 octobre 2016 à 21:43:21

              y'a pas de quoi ;)
              • Partager sur Facebook
              • Partager sur Twitter
              Si je suis tête en l'air, c'est par habitude de viser le sommet

              SyntaxError: keyword can't be an expression

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown