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 :

[aide de passage py2 à py3] TypeError pour script BLE


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut [aide de passage py2 à py3] TypeError pour script BLE
    Bonjour

    J'ai un script BLE qui fonctionne trés bien sous python2.
    Je suis en train de tout basculer avant la fin de la prise en charge de 2.7 en 2020

    Je joint le script entier pour info.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Traceback (most recent call last):
      File "test_beacon.py", line 108, in <module>
        subevent, = struct.unpack("B", pkt[3])
    TypeError: a bytes-like object is required, not 'int'
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        subevent, = struct.unpack("B", pkt[3])
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        subevent, = struct.unpack("=B", pkt[3])
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        subevent, = struct.unpack("B", bytes(pkt[3]))
    rien ne fonctionne, et comme je ne suis pas l'auteur de tout le script et quasi aucune notion dans le decodage BLE, je demande un peu d'aide.
    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par crashcoq Voir le message
    Je suis en train de tout basculer avant la fin de la prise en charge de 2.7 en 2020
    Même si P2 n'est plus pris en charge en 2020, déjà 2020 ce n'est pas pour demain, et la fin de la prise en charge a déjà été repoussée plusieurs fois donc rien ne dit qu'elle ne le sera pas encore, et enfin même si P2 n'est plus pris en charge, ça ne veut pas dire qu'il ne fonctionnera plus.
    Mais bon, tôt ou tard faudra passer à P3 donc je te comprends (moi je m'y suis mis à l'automne).

    Citation Envoyé par crashcoq Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "test_beacon.py", line 108, in <module>
        subevent, = struct.unpack("B", pkt[3])
    TypeError: a bytes-like object is required, not 'int'
    Bon, là le message dit qu'il attend un objet ressemblant à du bytes. Le bytes c'est le nouveau nom de ce qui était avant du "str" sous P2. Donc soit c'est "B" qui n'est pas accepté, soit "pkt[3]" (je pense moi à "pkt[3]" car il dit que le truc reçu est un int. Donc un print(type(pkt[3])) juste avant permettrait de voir si c'est bien ça.
    Ou alors c'est le retour de struct.unpack() qui n'est plus le même. Donc là aussi un truc du style toto=struc.unpack(...) puis un print(toto, type(toto)) permettrait de mieux voir ce qui se passe...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Dans struct.unpack("B", pkt[3]), pkt[3] est "int" parce que pkt est la séquence de bytes retournée par socket.read.... et que contrairement aux chaines de caractères (str) un item n'est pas une sous-truc du même type (i.e. c'est pas un bytes!).
    Il faut écrire çà: struct.unpack("B", pkt[3:4]) (pour forcer je veux un sous-truc d'une longueur de 1).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut
    Encore un dernier soucis que je ne trouve pas de solution ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "test_beacon.py", line 119, in <module>
        rssi=''.join(c for c in str(struct.unpack("b", pkt[report_pkt_offset-1])) if c in '-0123456789')
    TypeError: a bytes-like object is required, not 'int'
    avec la solution de Sve@r, le type est "truple" et la longueur est de 3
    j'ai donc essayé de changer le type avec https://docs.python.org/2/library/struct.html
    sans succès

    j'ai vu que truple est une table mais si je la converti en string, je perds tout dedans ...

  5. #5
    Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut
    Solution trouvé
    Juste ca pkt[report_pkt_offset-1:]
    Merci à tous les 2

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par crashcoq Voir le message
    Solution trouvé
    Juste ca pkt[report_pkt_offset-1:]
    Merci à tous les 2
    Vous pourriez simplifier cette horreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rssi=''.join(c for c in str(struct.unpack("b", pkt[report_pkt_offset-1])) if c in '-0123456789')
    qui s'écrit plus simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rssi = struct.unpack("b", pkt[-1:])
    et pas besoin d'en faire un "str", si c'est pour écrire ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calcul = (int(rssi) + int(rssi_old) /2)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [mIRC] besoin d'aide pour scripting
    Par emile13 dans le forum IRC / mIRC
    Réponses: 5
    Dernier message: 03/03/2007, 00h05
  2. Aide pour script bash
    Par cmoiki dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 05/01/2007, 23h50
  3. Aide pour script d'analyse d'évènements
    Par Spear- dans le forum VBScript
    Réponses: 7
    Dernier message: 18/10/2006, 11h49
  4. aide pour script php/mysql
    Par jem27 dans le forum Débuter
    Réponses: 18
    Dernier message: 27/03/2006, 18h08
  5. aides pour script en shell
    Par komatek dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 12/08/2003, 15h36

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