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 :

Qu'est-ce que l'erreur unexpected indent [Débutant(e)]


Sujet :

Python

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 140
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 140
    Par défaut Qu'est-ce que l'erreur unexpected indent
    Bonjour,

    J'ai ce message d'erreur que je n'avais pas avant et pourtant j'ai pas modifier cette partie....
    Je pense que "unexpected indent" est un problème de formatage? Par exemple si on aligne pas bien un if
    Ceci ne marchera pas
    Code PYTHON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if isSent is True:
    print "OK"
    ceci marchera si on met bien un tab avant le print
    Code PYTHON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if isSent is True:
         print "OK"
    Si le premier car génère bien le message "unexpected ident", je pense que mon problème vient de là.

    J'ai ce code
    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
     
    #preparing the insertion
    	add_position = ("INSERT INTO positions "
    		"(devise_id, imei, timestamp, value, lat, lng, alt, heading, speed, sensor, tower, battery) "
    		"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)")
     
    	data_position = (devise_id,imei,datetime.datetime.fromtimestamp(int(timestamp)).strftime('%Y-%m-%d %H:%M:%S'),value,lat,lng,alt,heading,speed,sensor,tower,battery)
        #
        ## connection
        db = MySQLdb.connect("localhost","root","N0mansland","mqtt")
        cursor = db.cursor()
     
        # http://mysql-python.sourceforge.net/MySQLdb.html#mysqldb
        ## Insertion
        try:
    		cursor.execute(add_position, data_position)
    		db.commit()
        except:
        	db.rollback()
    et ce message quand j'exécute mon scipt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    pierrot@bipme:/var/www/leaflet/rabbit/py$ python receive-new.py 
      File "receive-new.py", line 117
        add_position = ("INSERT INTO positions "
        ^
    IndentationError: unexpected indent
    Si mon raisonnement est juste, je n'arrive pas formater correctement ma variable add_position. Pourtant j'ai bien mis des tab représenté par [tab] et des retour représnter par [cr]. J'ai pas mis tout le code de ma fonction. J'ai juste mis ce qui bloque..
    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
    36
    37
     
    def fu():
    #...some other code....
    [tab]#DEBUG
    [tab]print('')
    [tab]print("Devise_id",devise_id)
    [tab]print("IEMI:",imei)
    [tab]print("Timestamp:",timestamp)
    [tab]print("Value:",value)
    [tab]print("Lat:",lat)
    [tab]print("Lng:",lng)
    [tab]if data["position"]["value"] == 1 :[cr]
    [tab][tab]print("Alt:",alt)[cr]
    [tab][tab]print("Heading:",heading)[cr]
    [tab][tab]print("Speed:",speed)[cr]
    [tab]print("Sensor:",sensor)[cr]
    [tab]print("Tower:",tower)[cr]
    [tab]print("Battery:",battery)[cr]
    [tab]print('')[cr]
    [cr]    
    [tab]#preparing the insertion
    [tab]add_position = ("INSERT INTO positions "[cr]
    [tab][tab]"(devise_id, imei, timestamp, value, lat, lng, alt, heading, speed, sensor, tower, battery) "[cr]
    [tab][tab]"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)")[cr]
    [tab]data_position = (devise_id,imei,datetime.datetime.fromtimestamp(int(timestamp)).strftime('%Y-%m-%d %H:%M:%S'),value,lat,lng,alt,heading,speed,sensor,tower,battery)[cr]
    #
    ## connection[cr]
    [tab]db = MySQLdb.connect("localhost","root","N0mansland","mqtt")[cr]
    [tab]cursor = db.cursor()[cr]
    [cr]
    [tab]# http://mysql-python.sourceforge.net/MySQLdb.html#mysqldb
    [tab]## Insertion
    [tab]try:
    [tab][tab]cursor.execute(add_position, data_position)
    [tab][tab]db.commit()
    [tab]except:
    [tab][tab]db.rollback()
    Merci pour votre avis

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 670
    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 670
    Par défaut
    Salut,

    Citation Envoyé par pierrot10 Voir le message
    J'ai ce message d'erreur que je n'avais pas avant et pourtant j'ai pas modifier cette partie....
    Je pense que "unexpected indent" est un problème de formatage? Par exemple si on aligne pas bien un if
    Si vous êtes surpris par ce genre de message d'erreur, il faut prendre le temps de comprendre la structure de blocs d'un programme Python et de lire le chapitre correspondant du Swinnen.

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

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Par défaut
    Bonjour,

    Première question, pourquoi les instructions d'affectation des variables add_position et data_position sont elles indentées ?

    J'imagine que probablement ces deux affectations font partie d'un bloque d'instructions.
    Dans ce cas la ligne blanche entre les deux affectations est-elle indentée ?

    Si ce n'est pas le cas, le bloque d'instructions se termine après la première affectation de add_position et du coup l'affectation de data_position n'est pas dans le bon bloque d'instructions.

    Un conseil, revérifier toutes vos indentations, c'est une erreur classique aux débuts.
    Le plus simple est d'utiliser un IDE qui affiche les espaces et les tabulations.

    Il y a aussi des outils pour contrôler l'indentation de son code, mais je ne me souvient plus de leur nom, il faudra utiliser un moteur de recherche.

    Salutations.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 670
    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 670
    Par défaut
    Citation Envoyé par aepli Voir le message
    J'imagine que probablement ces deux affectations font partie d'un bloque d'instructions.
    Dans ce cas la ligne blanche entre les deux affectations est-elle indentée ?

    Si ce n'est pas le cas, le bloque d'instructions se termine après la première affectation de add_position et du coup l'affectation de data_position n'est pas dans le bon bloque d'instructions.
    Non. On peut avoir des lignes blanches entres les instructions d'un même block (heureusement d'ailleurs car sinon bonjour la prise de tête pour pouvoir éditer un script avec n'importe quel éditeur de texte).

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

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 140
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 140
    Par défaut
    Bonjour
    Je vous remercie pour vos observations.
    Je pense que j'utilisais un mauvais editeur de text. J'utilisais Textwrangler.
    J'ai edité mon script avec le terminal sudo vi monscript.py et là, l'affichage differe.

    J'ai corrigé l'alignement de mes lignes et tout fonctionne. Faudrait que je prenne un autre IDE pour Python.

    merci

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Par défaut
    Bonjour,

    Au temps pour moi, navré, j'ai confondu avec l'interpréteur en ligne de commande où l'arrivée d'une ligne blanche fait exécuté le bloque d'instructions précédentes.

    Citation Envoyé par wiztricks Voir le message
    Non. On peut avoir des lignes blanches entres les instructions d'un même block (heureusement d'ailleurs car sinon bonjour la prise de tête pour pouvoir éditer un script avec n'importe quel éditeur de texte).

    - W
    Salutations.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Par défaut
    Citation Envoyé par pierrot10 Voir le message
    Bonjour
    Je vous remercie pour vos observations.
    Je pense que j'utilisais un mauvais editeur de text. J'utilisais Textwrangler.
    J'ai edité mon script avec le terminal sudo vi monscript.py et là, l'affichage differe.

    J'ai corrigé l'alignement de mes lignes et tout fonctionne. Faudrait que je prenne un autre IDE pour Python.

    merci
    Textwrangle permet d'afficher l’indentation mais à le défaut d'avoir du mal avec certain encodage de fichier autre que UTF-8 ( sur mac en tout cas)

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/10/2015, 14h52
  2. Quelle est la plus grosse erreur de programmation que vous ayez jamais commise ?
    Par Katleen Erna dans le forum Débats sur le développement - Le Best Of
    Réponses: 138
    Dernier message: 03/08/2011, 23h38
  3. est ce que j'ai une erreur?
    Par nsqualli dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/11/2008, 13h22
  4. Réponses: 4
    Dernier message: 12/10/2008, 20h14
  5. [MySQL] est ce que l'emplacement de la requete est la cause de l'erreur
    Par info_sara dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/06/2008, 13h41

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