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: erreur boucle for et if


Sujet :

Python

  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: erreur boucle for et if
    J'ai fait la fonction suivante pour récupérer mais valeurs de registres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      def reg_val_list_binary2(s):
        r = []
        for i in func_code(s):
            try: 
                if  i == 3:
                    r = reg_val_list3(s)
                elif  i == 1: 
                    r = reg_val_list_binary(s)
            except AttributeError:
                pass
        return r
    Sachant que la fonction reg_val_list3(s) est codée comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
       def reg_val_list3(s):
        v = []
        for p in s:
            if p.haslayer('ModbusADUResponse'):
                try:
                    if p['ModbusADUResponse'][1].funcCode == 3:
                        v += p['ModbusADUResponse'][1].registerVal
                except AttributeError:
                    pass
        return v
    et la fonction reg_val_list_binary(s) est codée ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
       def reg_val_list_binary(s):
        r = []
        for x in reg_val_list1(s):
            r += [int(bit)for bit in str( bin(x) )[2:].zfill(8)] [::-1]
        return r
    J'ai l'impression qu'il ne trouve pas func_code == 1 alors qu'il y est

    Un idée ?

  2. #2
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Bonjour,

    J'ai l'impression qu'il ne trouve pas func_code == 1
    honnêtement même moi je ne trouve pas func_code dans votre code, à quel moment vous le définissez ?

    Par contre va falloir être un peu plus explicite sur ce que vous obtenez comme sorties sinon on va perdre du temps à comprendre votre besoin.

  3. #3
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 919
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    +1 avec @nekcorp.
    J'ajouterai: enlève tes try-accept, ajoute des print() pour afficher le contenu de tes variables et tu devrais voir/comprendre où est ton souci ...

  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
    En fait func-code est codée comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    def func_code(s):
        r = []
        for p in s:
            if p.haslayer('ModbusADURequest'):
                try:
                    if p['ModbusADURequest'][1].funcCode == 3:
                        r.append(3)
                    elif p['ModbusADURequest'][1].funcCode == 1:
                        r.append(1)
                except AttributeError:
                    pass
     
        return r
    En fait la func_code renvoie par exemple [3,3,3,3,1,1,3,3] mais reg_val_list_binary2 me renvoie que les valeurs qui concernent la dernière valeur dans la boucle. Par exemple si on a [3,3,3,3,1,1,3,3] ça me renvoie que les valeurs qui concernent le 3 alors que j'ai modifié mon code de ma manière suivante:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    def reg_val_list_binary2(s):
        r = []
        w = []
        v = func_code(s)
        for i in v:       
            if  i == 1:
                w = reg_val_list_binary(s)
     
            elif  i == 3: 
                r = reg_val_list3(s)
        return r,w
    Avec ce code j'ai maintenant toutes mes valeurs mais pas au bon ordre, ça me renvoie toutes les valeurs de r puis de w. Je veux récupérer les valeurs comme apparaissent les func_code c'est à dire (pour notre exemple qui est [3,3,3,3,1,1,3,3]): 4 fois les valeurs de 3 puis 2 fois les valeurs de 1 puis 2 fois les valeurs avec mon code actuel, j'ai 6 fois les valeurs de 3 et 2 fois les valeurs 1.
    Un idée pour garder l'ordre ?

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

Discussions similaires

  1. Erreur Boucle For Each
    Par counterbob dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/07/2019, 14h31
  2. Erreur boucle for
    Par ameurboubaker dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/11/2009, 14h04
  3. [Débutant] Erreur Boucle For
    Par Medde dans le forum MATLAB
    Réponses: 5
    Dernier message: 24/06/2009, 13h36
  4. [VBA-E] erreur boucle for each
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/02/2006, 16h38
  5. Erreur avec la boucle For
    Par Harvester dans le forum Langage
    Réponses: 3
    Dernier message: 06/11/2005, 16h46

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