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:
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:
Citation:
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 :)