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: Error de conversion décimal en bits


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 43
    Par défaut Python: Error de conversion décimal en bits
    Je suis débutant en python. J'ai développé une fonction qui récupère des décimaux si le code de la fonction est égal à 1 et qui convertit ces décimaux en bits mais le souci c'est que cette fonction ne fonctionne pas. Il me renvoie une liste vide alors qu'elle doit pas. La liste des bits doit contenir bien des bits.

    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
     
    def coil_val_list(s):
        v = []
        r = []
        i = []
        for p in s:
            if p.haslayer('ModbusADUResponse'):
                try:
                    if p['ModbusADUResponse'][1].funcCode == 1:
                        r = v.extend(p['ModbusADUResponse'][1].coilStatus)
                        for i in r:
                            if i == 1:
                                v.extend([1,0,0])
                            else:
                                v += [int(bit)
                        for bit in str( bin(i) )[2:].zfill(8)] [::-1]
                except AttributeError:
                    pass
        return v
    J'ignore l'original de cet erreur ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    1. La condition if p.haslayer('ModbusADUResponse'): n'est jamais vraie.
    2. La condition if p['ModbusADUResponse'][1].funcCode == 1: n'est jamais vraie
    3. Tu as un bug ici r = v.extend(p['ModbusA...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    >>> v = [1, 2]
    >>> r = v.extend([3, 4])
    >>> r
    >>> for i in r:
    ...     pass
    ... 
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'NoneType' object is not iterable
    Étant donné que cette erreur n'est pas levée, je penche plutôt pour une des deux premières causes.

    Tu as aussi une bizarerie de syntaxe ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                                v += [int(bit)
                        for bit in str( bin(i) )[2:].zfill(8)] [::-1]

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Quelques "print" bien placés permettraient sans doute de voir quelles lignes ne correspondent pas à ce que tu attends.

  4. #4
    Membre averti
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2017
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 43
    Par défaut
    Les deux conditions:
    1. La condition if p.haslayer('ModbusADUResponse')
    2. La condition if p['ModbusADUResponse'][1].funcCode == 1
    Sont vraies (voir l'image), on a bien une réponse modbus et on a bien une fonction dont le code est 1

    Nom : wireshark.GIF
Affichages : 145
Taille : 91,9 Ko

    Pour : v += [int(bit)
    for bit in str( bin(i) )[2:].zfill(8)] [::-1]

    C'est pour convertir mes décimaux en bits car les fonctions bin () et encode () ne marchaient pas

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Enlève le try except pour commencer.

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

Discussions similaires

  1. conversion décimal vers binaire 32 bit
    Par Oscar02 dans le forum Débuter
    Réponses: 4
    Dernier message: 11/05/2014, 02h12
  2. Conversion Décimal -> Binaire 32 Bits
    Par algerino77 dans le forum Débuter
    Réponses: 8
    Dernier message: 16/10/2013, 20h39
  3. conversion décimale -> héxadécimale
    Par cout dans le forum C
    Réponses: 6
    Dernier message: 03/07/2006, 14h51
  4. Algo Conversion Décimal -> Binaire
    Par MisterTee dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 23/02/2006, 22h53
  5. error: invalid conversion from `const wxChar*' to `CHAR*'
    Par barbarello dans le forum wxWidgets
    Réponses: 16
    Dernier message: 31/01/2006, 11h28

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