OVH Cloud OVH Cloud

drole d'erreur

13 réponses
Avatar
Almaleh
Bonjour,

J'ai le code suivant (une partie)(peu importe ce que ca fait à vrai
dire)

var1="\"%s\",\"%s\"\r\n" % (a,motrie)
dest.write(var1)

Ca me génère une erreur : KeyError: '\xeb'

Si je mets print var1 entre les deux lignes, le programme tourne
normalement. Bizarre. Une idee ??

merci
Francois A.

--
Francois A.
_________

Excellent newsreader : http://mesnews.no-ip.com

10 réponses

1 2
Avatar
Do Re Mi chel La Si Do
Bonsoir !

A défaut de savoir ce qu'est "dest" ça risque d'être dur de deviner...

@-salutations

Michel Claveau
Avatar
Almaleh
A défaut de savoir ce qu'est "dest" ça risque d'être dur de deviner...
Dest est un fichier (puisque méthode .write).

Mais le probleme n'est pas celui la : une instruction print fait
tourner le programme normalement, sans l'instruction print, ca bug
(j'utilise les caractères accentués dans un dictionnaire, et mis dans
sitecustomize.py latin-1).


Francois

--
Francois A.
_________

Excellent newsreader : http://mesnews.no-ip.com

Avatar
Almaleh
A défaut de savoir ce qu'est "dest" ça risque d'être dur de deviner...
Dest est un fichier (puisque méthode .write).

Mais le probleme n'est pas celui la : une instruction print (meme vide
!!) fait tourner le programme normalement ; sans l'instruction print,
ca bug (j'utilise les caractères accentués dans un dictionnaire, et mis
dans sitecustomize.py latin-1).

--
Francois A.
_________

Excellent newsreader : http://mesnews.no-ip.com

Avatar
Hervé Cauwelier
Bonjour,

J'ai le code suivant (une partie)(peu importe ce que ca fait à vrai dire)


Il semble pourtant qu'on ait besoin d'un extrait plus complet. Notamment
la nature des variables utilisées et des exemples de ce qu'elles
contiennent.

var1=""%s","%s"rn" % (a,motrie)


Beaucoup plus lisible :

var1='"%s","%s"rn' % (a,motrie)

Tous les types de guillemets (quotes) sont équivalent en Python, à part
les triples qui conservent les retours à la ligne.

dest.write(var1)

Ca me génère une erreur : KeyError: 'xeb'


Un traceback plus bavard aiderait aussi.

À vue de nez, ça peut être un problème de codage ou de déréférencement
de variable.

--
Hervé Cauwelier
http://www.oursours.net/

Avatar
bruno modulix
Almaleh wrote:
A défaut de savoir ce qu'est "dest" ça risque d'être dur de deviner...


Dest est un fichier (puisque méthode .write).


class Machin(object):
def write(self, what):
pass

dest = Machin()
var1=""%s","%s"rn" % (a,motrie)
dest.write(var1)

Bref, tout ce qui a une méthode write() n'est pas un fichier...

De même, on ne sait pas ce que sont a et motrie...

Mais le probleme n'est pas celui la : une instruction print (meme vide
!!) fait tourner le programme normalement ; sans l'instruction print, ca
bug (j'utilise les caractères accentués dans un dictionnaire, et mis
dans sitecustomize.py latin-1).


Poste un traceback complet, ainsi que le code minimal nécessaire pour
reproduire l'erreur.

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"


Avatar
DarkPearl
Bonjour, très sincèrement, il est fortement improbable que l'erreur
vienne d'un bug de Python.
Maintenant, quand tu ajoutes un print dans ton prorgamme, il se peux
que python modifie le type de ta variable implicitement. Donc a priori
c'est qu'il y a dans ta variable var1 qui fait planter ton prog.

J'aimerai savoir ce que tu crois qu'il y a dans var1 et de quel type
cette variable devrait être.

Cordialement
Cédric
Avatar
Almaleh
Voici le code correspondant :
Sans le print ecrirefich à la fin, ca coince !
Je n'ai pas d'idée
Merci
Francois

ps : mis sitecustomize.py latin-1.
En entete du programme, Cp1252,latin11,cp850,utf-8 ca ne résoud rien.



fichiermots=open('mots_francais.txt','r') #fichier initial
dest=open('dicosort.txt','w') #fichier retraité
DICO={'-':'','ä':'a','é':'e','è':'e','ê':'e','ë':'e','à':'a','â':'a','ç':'c','î':'i','ï':'i','ü':'u','ù':'u','û':'u','ö':'o','ô':'o'}
Le
while L<123:
DICO[chr(L)]=chr(L)
L=L+1
while 1:
motliste=[]
motrie2=''
x=0
a=fichiermots.readline()
if len(a)==0: #tester si EOF
break
else:
for car in a[:len(a)-1]:
s=DICO[car] #remplacement accentuation par
normal
motliste.append(s) #constitution du mot
motliste.sort()
for let in motliste:
motrie2=motrie2+motliste[x].lower()
x=x+1
ecrirefich = ""%s";"%s"n" % (a[:len(a)-1],motrie2)
print ecrirefich
dest.write(ecrirefich)

fichiermots.close()
dest.close()


--
Francois A.
_________

Excellent newsreader : http://mesnews.no-ip.com
Avatar
Encolpe Degoute
Bonjour,

J'ai le code suivant (une partie)(peu importe ce que ca fait à vrai dire)

var1=""%s","%s"rn" % (a,motrie)
dest.write(var1)


Cela ressemble à un export au format CSV. Il y a le module « csv » qui
gère cela maintenant.

Ca me génère une erreur : KeyError: 'xeb'


Pour savoir de quel variable vient l'erreur je ferai le write en deux fois:

dest.write('"%s",' % a)
dest.write('"%s"rn' % motrie)

Le caractère 'xeb' est 'ë':
c = 'ë'
c.decode('utf-8').encode('iso-8859-15')
'xeb'




Avec le traceback complet cela nous donnerait un indice supplémentaire,
même si cela ressemble à un problème d'encodage.

Si je mets print var1 entre les deux lignes, le programme tourne
normalement. Bizarre. Une idee ??


J'ai déjà vu ça.
Il faudrait plutôt faire un print de a et de motrie avant de créé var1
pour tracer le problème. Qi cela ne fonctionne pas, il suffira de
commenter un print pour savoir de quel variable vient l'erreur.

Cordialement,
--
Encolpe DEGOUTE
http://encolpe.degoute.free.fr/
Logiciels libres, hockey sur glace et autres activités cérébrales



Avatar
Do Re Mi chel La Si Do
Bonjour !

Pas de problème, chez moi (avec ou sans le print ecrirefich).
Tu devrais regarder "maketrans", "translate" (dans la librairie standard) ;
ça pourrait t'intéresser...

@-salutations

Michel Claveau
Avatar
Almaleh
Merci
Francois


--
Francois A.
_________

Excellent newsreader : http://mesnews.no-ip.com
1 2