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 :

[Débutant] cannot concatenate 'str' and 'int' objects


Sujet :

Python

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut [Débutant] cannot concatenate 'str' and 'int' objects
    Bonjour à tous

    Je suis novice avec Python (pika). Je suis désolé si ma question semble simple, mais je n'ai pas réussi à faire avec les exemples que j'ai trouvé

    'ai un code Python que j'ai repris qui va recupérer des données qui son stocké sur un serveur rabbitMQ (MQTT).

    Ca ca marhce bien.

    la chaine de caratere se trouve dans 'body'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print(" [x] %r" % body)
        data = json.loads(body)
    Voici le contenu de 'body'
    {"position":{"value":0,"timestamp":"1483729658000","context":{"lat":46.21984,"lng":6.14123,"IMEI":"865067020466666","Battery":38,"Quality":"GSM","Tower":"228,03,1771,2d6f,45,57"}},"battery":38}
    J'aimerais pouvoir affiché les valeur de lat ou lng ou Battery ou encore value

    J'ai donc essyé de faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      data = json.loads(body)
        print('')
        print ("Battery: " + data["battery"])
        print ("Lat: " + data["lat"])
        print ("Lng:" +data["lng"])
        print('')
    mais évidemment, ca part en qaquouette!!
    Traceback (most recent call last):
    File "receive_2.py", line 34, in <module>
    channel.start_consuming()
    File "/usr/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 917, in start_consuming
    self.connection.process_data_events()
    File "/usr/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 215, in process_data_events
    if self._handle_read():
    File "/usr/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 328, in _handle_read
    super(BlockingConnection, self)._handle_read()
    File "/usr/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 326, in _handle_read
    self._on_data_available(data)
    File "/usr/lib/python2.7/dist-packages/pika/connection.py", line 1271, in _on_data_available
    self._process_frame(frame_value)
    File "/usr/lib/python2.7/dist-packages/pika/connection.py", line 1351, in _process_frame
    self._deliver_frame_to_channel(frame_value)
    File "/usr/lib/python2.7/dist-packages/pika/connection.py", line 963, in _deliver_frame_to_channel
    return self._channels[value.channel_number]._handle_content_frame(value)
    File "/usr/lib/python2.7/dist-packages/pika/channel.py", line 791, in _handle_content_frame
    self._on_deliver(*response)
    File "/usr/lib/python2.7/dist-packages/pika/channel.py", line 886, in _on_deliver
    body)
    File "receive_2.py", line 25, in callback
    print ("Battery " + data["battery"])
    TypeError: cannot concatenate 'str' and 'int' objects
    Je pense que je parse mal ma chaine de caractere en json et j'ai vraiment ausune idée comment le faire

    Voici mon code complet
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #!/usr/bin/env python
    import pika
    import json
     
    connection = pika.BlockingConnection(pika.ConnectionParameters(
            host='localhost'))
    channel = connection.channel()
     
    channel.exchange_declare(exchange='log',
                             type='topic')
     
    result = channel.queue_declare(exclusive=True)
    #queue_name = result.method.queue
    queue_name = 'fona'
    print(queue_name)
    channel.queue_bind(exchange='log',
                       queue=queue_name)
     
    print('[*] Waiting for logs. To exit press CTRL+C')
     
    def callback(ch, method, properties, body):
        print(" [x] %r" % body)
        data = json.loads(body)
        print('')
        print ("Battery " + data["battery"])
        print ("Lat " + data["lat"])
        print ("Lng " + data["lng"])
        print('')
     
    channel.basic_consume(callback,
                          queue=queue_name,
                          no_ack=True)
     
    channel.start_consuming()
    Merci de me mettre sur la bonne piste!!!

    PS: Ensuite, ces données récupérées, je veux les sauver dans une base myQSL...
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Yop,

    Essaye de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print ("Battery: " + data["battery"])
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print ("Battery: " + str(data["battery"]))
    La tu essaye d'ajouter un nombre à une chaîne de caractères. Python à beau être un language au typage faible il existe quand même. Faire une opération sur des éléments de types différents peut poser problème. Dans la plupart des cas une simple conversion suffit à résoudre le problème.

    PS : Tu va avoir la même erreur avec lat et lng.

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 096
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 096
    Points : 944
    Points
    944
    Par défaut
    D'accord merci!!
    Il ne suffit pas de tout savoir. Vouloir et persévérer, c'est déjà presque tout!

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Le message d'erreur est clair; la valeur de battery est un entier.
    Print tes valeurs comme tu l'as fait avec body print('valeur: %s' % data['machin'].


    Ensuite tu te trompes sur l'arborescence de ton dictionnaire.
    print ("Lat: " + data["lat"]) te retournera une KeyError

    Aligne correctement ton dico et tu verras mieux
    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
     
    {"position": {
        "value":0,
        "timestamp":"1483729658000",
        "context": { 
            "lat":46.21984,
            "lng":6.14123,
            "IMEI":"865067020466666",
            "Battery":38,
            "Quality":"GSM",
            "Tower":"228,03,1771,2d6f,45,57"
            }
        },
        "battery":38
    }

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Et on peut aussi se rappeler que "print" accepte une liste de paramètres:
    Plutôt que print ("Lat: " + str(data["lat"])), écrire print ("Lat:", data["lat"]) fonctionne aussi bien.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/10/2009, 01h47
  2. [PHP 5.0] Comment extraire du texte se trouvant AVANT un caractère
    Par pierrot10 dans le forum Langage
    Réponses: 3
    Dernier message: 05/01/2009, 14h34
  3. Comment extraire le texte de chaque logigramme ?
    Par Natbon dans le forum Visio
    Réponses: 1
    Dernier message: 23/09/2008, 15h51
  4. Réponses: 3
    Dernier message: 21/05/2008, 18h24
  5. Réponses: 24
    Dernier message: 20/08/2006, 14h08

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