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 :

erreur encodage ?


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 76
    Points
    76
    Par défaut erreur encodage ?
    J'ai quelques soucis sur un script qui me semblent (pour moi) inexplicables. L'erreur semble être au départ une erreur d'encodage mais je suis un peu perdu.

    Voici le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    nouv_fichier=open("C:\\Documents and Settings\\PCA\\Bureau\\qual_novembre_decembre\\Cumul_quant.csv", "w")
    nouv_fichier.write("INDICE_NATIONAL"+" ; "+"DATE_MESURE"+";"+"VALEUR"+" ; "+"CODE_UNITES_REFERENCE"+ " ; "+"CODE_CONFORMITE"+" ; "+"CODE_CONTINUITE"+" ; "+"CODE_OBTENTION"+" ; "+"CODE_PRODUCTEUR"+ " ; " +"CODE_METHODE"+" ; "+"COMMENTAIRES"+"\n")
    compt3 = 0
    for ecrire in traitement:
        if ecrire[3]!=0 or type(ecrire[3])!= str:
            nouv_fichier.write("%s ; %s ; %s ; %s ; %s ; %s ; %s ; %s ; %s ; 2\n" % (ecrire[0], ecrire[1], ecrire[3], ecrire[4], ecrire[5], ecrire[6], ecrire[7], str(ecrire[8]), ecrire[9])
    nouv_fichier.close()
    Sous py-scripter
    L'erreur est la suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      File "E:\Etudes\E0961_SAGE_est_Lyonnais\essai_cumulasc.py", line 86
        nouv_fichier.close()
                   ^
    SyntaxError: invalid syntax
    avant ça j'ai eu des problèmes d'encodage du coup j'ai changé plusieurs fois l'en tête d'encodage... mais les erreurs se succédent et ne se ressemblent pas...
    Sous IDLE

    Tokken Error : EOF in multi-line statement


    J'ai également des erreurs d'encodage avec d'autres script qui ont pour en tête. # -*- coding: Latin-1 -*-
    Dans ces script tous les endroits où il y a des accents posent problème.

    NB : Cette erreur est apparue après une mise à jour de PyScripter...

  2. #2
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    il manque une parenthèse fermante à la fin de la ligne précedente
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 76
    Points
    76
    Par défaut
    Merci pacificator,



    Malgré ça j'ai toujours une erreur qui subsiste au niveau de l'encodage, dans le reste du code mes accents ne sont pas reconnus. alors que l'en-tête est:
    # -*- coding: Latin-1 -*-

  4. #4
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Et tu es sûr que ton fichier est bien codé en latin-1 et non par mégarde en utf-8 ?

    Il faut faire attention, il y a un 2 choses différentes concernant l'encodage, la ligne python qui indique le jeu de caractères utilisé et le jeu de caractères effectif du fichier.

    La ligne "# -*- coding: Latin-1 -*-" n'est qu'une information pour pyhton.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  5. #5
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    http://w w w.developpez.net/forums/d694863/autres-langages/python-zope/contribuez/tip-truc-astuce-conseil-eof-in-multi-line-statement/#post4052393[/url]

    http://www.developpez.net/forums/d69...t/#post4052393

  6. #6
    Membre averti Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Points : 344
    Points
    344
    Par défaut Juste une parenthèse
    Oui il manque une parenthèse en fin de ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    nouv_fichier.write
    (
    "%s ; %s ; %s ; %s ; %s ; %s ; %s ; %s ; %s ; 2\n" %
    (
    ecrire[0], ecrire[1], ecrire[3], ecrire[4], ecrire[5], ecrire[6], ecrire[7], str(ecrire[8]), ecrire[9]
    )
    )<= Rajouté...
    J'ai fait ceci pour le voir :

    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
     
    #!/usr/bin/env python
    # -*- coding: iso-8859-15 -*-
    fo=open("Par.py","r")
     
    for numligne,ligne in enumerate(fo):
        par=[]
        p=0
        for numc,c in enumerate(ligne) :
            if c=="(" :
                p=p+1
                par.append((c,numc))
            if c==")":
                p=p-1
                par.append((c,numc))
        if p!=0:
            print "ligne",numligne +1
            print ligne 
            print p ,"parenthèses non fermée"
            for l in par:
                print l[0],l[1]
            print "-------------------"
    Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ligne 6
            nouv_fichier.write("%s ; %s ; %s ; %s ; %s ; %s ; %s ; %s ; %s ; 2\n" % (ecrire[0], ecrire[1], ecrire[3], ecrire[4], ecrire[5], ecrire[6], ecrire[7], str(ecrire[8]), ecrire[9])
     
    1 parenthèses non fermée
    ( 26
    ( 80
    ( 161
    ) 171
    ) 183
    -------------------

  7. #7
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Astucieux, alexdevl.
    Je ne me rappelle pas si je n'ai jamais pensé à faire un tel programme ou si j'ai été trop feignant pour l'écrire après y avoir pensé. En tous cas, je ne l'avais pas dans ma boite à outils.

    Cependant IDLE est plus fort: ton code ne marche que si le code examiné ne comporte que des instructions s'étendant sur une seule ligne, tandis que le tip que j'indique dans le post à l'adresse
    http://www.developpez.net/forums/d69...ine-statement/
    marche y compris dans le cas de ce code touffu.
    Si on lance ton code de recherche sur le code dans mon post on obtient:

    >>>
    ligne 11
    return len(\

    1 parenthèses non fermée
    ( 15
    -------------------
    ligne 12
    re.findall(\

    1 parenthèses non fermée
    ( 22
    -------------------
    ligne 18
    text, re.IGNORECASE)\

    -1 parenthèses non fermée
    ) 31
    -------------------
    ligne 19
    )

    -1 parenthèses non fermée
    ) 12
    -------------------
    ligne 65
    assert( 0 == NumberOfOccurencesOfWordInText("retirement home",

    2 parenthèses non fermée
    ( 10
    ( 47
    -------------------

    etc etc
    c'est à dire que ton code détecte les parenthèses ouvrantes n'ayant pas leurs contreparties fermantes sur la même ligne.

    Il faudrait donc améliorer ton code.

    Est-ce que c'est ce code que tu utilises pour trouver les lignes en cause lors d'erreurs de type "EOF in multi-line statement" ?

    ----------------------

    J'aimerais aussi savoir comment font les autres pythoniens quand il sont confrontés à cette erreur.

    Et à quel endroit on trouve une explication donnant le tip que j'ai indiqué dans mon post.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 76
    Points
    76
    Par défaut
    Du coup, comment faire pour transformer l'encodage de mon fichier en Latin-1 si je veux que tout mes accents et caractères spéciaux soient reconnus?

    Car maintenant j'ai une autre erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Traceback (most recent call last):
      File "<string>", line 244, in run_nodebug
      File "E:\Etudes\E0961_SAGE_est_Lyonnais\cumulasc.py", line 86, in <module>
        nouv_fichier.write("%s ; %s ; %s ; %s ; %s ; %s ; %s ; %s ; %s ; 2\n" % (ecrire[0], ecrire[1], ecrire[3], ecrire[4], ecrire[5], ecrire[6], ecrire[7], str(ecrire[8]), ecrire[9]))
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 21: ordinal not in range(128)
    La position 21 correspond à mon premier signe %...
    L'encodage par défaut sous pyscripter étant "Default file encoding for new file" : sf-ansi

  9. #9
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Citation Envoyé par eyquem Voir le message
    ...J'aimerais aussi savoir comment font les autres pythoniens quand il sont confrontés à cette erreur.

    Et à quel endroit on trouve une explication donnant le tip que j'ai indiqué dans mon post.
    Personnellement, j'utilise notepad++ qui indique le caractère correspondant 'matching brace', et ce même sur les balises html.

    Concernant l'encodage, pareil, notepad++ et regarder dans le menu Format.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    J'aimerais aussi savoir comment font les autres pythoniens quand il sont confrontés à cette erreur.
    Pour ma part j'utilise pydev, et il m'indique en temps réel mes erreurs de syntaxe. ça fonctionne aussi pour l'oublie de crochet, d'accolade, l'oublie des ':' pour définir une boucle ou une fonction...
    C'est quand même une usine à gaz, mais c'est pratique pour gérer de gros projets.

  11. #11
    Membre averti Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Points : 344
    Points
    344
    Par défaut
    Astucieux, alexdevl.
    Je ne me rappelle pas si je n'ai jamais pensé à faire un tel programme ou si j'ai été trop feignant pour l'écrire après y avoir pensé. En tous cas, je ne l'avais pas dans ma boite à outils.
    Heu en fait j'avais la flemme de chercher ou manquait la parenthèse. c'est pour ceci que j'ai fait ce prog.

    Mais je continuerai .Cet outil peux être sympa, je n'ai pas cette fonction sur ulipad mais je peux la créer.

    Alex

Discussions similaires

  1. Erreur encodage Sql Server UTF-8
    Par Nico820 dans le forum Outils
    Réponses: 2
    Dernier message: 18/01/2011, 16h24
  2. [SSIS] [2K8] Validation XML erreur encodage
    Par StitchP dans le forum SSIS
    Réponses: 0
    Dernier message: 03/09/2010, 11h33
  3. Erreur encodage UTF-8
    Par dafalri dans le forum Langage
    Réponses: 8
    Dernier message: 02/12/2008, 15h44
  4. Erreur encodage
    Par mandaillou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/11/2005, 15h27

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