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 :

Python 3: ValueError Dictionary update sequence element


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de Gecko
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2008
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 499
    Par défaut Python 3: ValueError Dictionary update sequence element
    Bonjour,

    j'ai un soucis avec une fonction en Python 3. Cette fonction envoie une requête telnet et interprète le ou les retours.

    Je l'ai documenté donc vous devriez comprendre le principe assez facilement.

    Code python : 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
      def execute(self, cmd, params = {}, flags = None):
        data = []
        commandLine = cmd
        endCommandLine = self.__toBytes("\n\r")
     
        # Traitement des paramètres reçus
        for key in params:
          commandLine += " " + key + "=" + self.encode(params[key])
     
        # Si on a des flags on les ajoutes
        if flags is not None:
          commandLine += " "+ flags
     
        # Ajout de la fin de la commande
        commandLine += "\n\r"
     
        # On envoie la commande Telnet convertie en byte
        self.__telnet.write(self.__toBytes(commandLine))
     
        # On récupère le résultat et on le converti en string
        response = self.__toString(self.__telnet.read_until(endCommandLine, self.__timeout))
     
        # On cherche le message d'erreur
        error = re.match("error id=([\d]+) msg=([\w ]+)", response)
     
        # Si on a pas de messa  ge d'erreur c'est qu'on a des données à traiter
        if error is None:
     
          #### Définition de response pour divers tests, le script fonctionne nickel avec mais pas avec le retour telnet :/
          #response = "clid=1 cid=110 client_database_id=12 client_nickname=cham client_type=0|clid=2 cid=6 client_database_id=1634 client_nickname=pierrenfeu client_type=0|clid=3 cid=6 client_database_id=1349 client_nickname=Taipan client_type=0|clid=4 cid=6 client_database_id=1706 client_nickname=torpille client_type=0|clid=7 cid=5 client_database_id=1143 client_nickname=Rivz\s-\sBokassa client_type=0"
     
          # On créé le dictionnaire et on l'ajoute à data
          data.append([dict(item.split("=") for item in ss.split()) for ss in response.split('|')])
     
          # On récupère la seconde réponse qui contiens forcément le message d'erreur 
          response = self.__toString(self.__telnet.read_until(endCommandLine, self.__timeout))
     
          # On match le message d'erreur
          error = re.match("error id=([\d]+) msg=([\w ]+)", response)
     
        # Debug: affichage des groups matchés
        print(error.groups())
     
        # On retourne les données
        return data
     
      def __toString(self, data = None):
        if data is not None:
          return str(data, encoding='UTF-8')
     
      def __toBytes(self, data = None):
        if data is not None:
          return bytes(data, encoding='ascii')

    Le gros problème que j'ai avec cette fonction est que j'obtiens toujours cette erreur:
    ValueError: dictionary update sequence element #0 has length 1; 2 is required
    Je ne comprend pas où est mon erreur, je pense que ça viens du format ou charset utilisé pour mon résultat mais je ne trouve rien de probant sur le net

    Merci pour le coup de pouce

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En passant en revue quelques cas de figure jusqu'à retrouver votre erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    data = []
    #~ response = "clid=1 cid=110 client_database_id=12 client_nickname=cham client_type=0|clid=2 cid=6 client_database_id=1634 client_nickname=pierrenfeu client_type=0|clid=3 cid=6 client_database_id=1349 client_nickname=Taipan client_type=0|clid=4 cid=6 client_database_id=1706 client_nickname=torpille client_type=0|clid=7 cid=5 client_database_id=1143 client_nickname=Rivz\s-\sBokassa client_type=0"
    #~ response = "clid=1 cid=110 client_database_id=12 client_nickname=cham client_type=0"
    response = "clid cid=110 client_database_id=12 client_nickname=cham client_type=0"
    #~ response = None
    # On créé le dictionnaire et on l'ajoute à data
    data.append([dict(item.split("=") for item in ss.split()) for ss in response.split('|')])
    print(data)
    L'erreur en question apparaît lorsque vous avez un paramètre dans response qui n'est pas suivi par "=".

    @+.
    Dernière modification par Invité ; 12/06/2014 à 20h36. Motif: Inutile de citer entièrement le message précédent

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/07/2006, 17h34
  2. [XSD] Element sequence
    Par be_tnt dans le forum Valider
    Réponses: 5
    Dernier message: 06/07/2006, 10h38
  3. [XSD] Elements de meme nom dans une sequence
    Par MathiasM dans le forum Valider
    Réponses: 2
    Dernier message: 14/04/2005, 09h33
  4. Réponses: 2
    Dernier message: 07/01/2005, 20h40

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