Je suis en train d'écrire du code python et je reçois le message d'erreur comme dans le titre. La recherche concerne le jeu de caractères.
Voici la ligne qui cause l'erreur
hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")
Je ne peux pas déterminer quel caractère ne figure pas dans l'ensemble ANSI ASCII? De plus, la recherche sur "\ xe2" ne donne plus d'informations sur le caractère qui apparaît. Quel personnage dans cette ligne est à l'origine du problème?
J'ai également vu quelques correctifs pour ce problème mais je ne sais pas lequel utiliser. Quelqu'un pourrait-il clarifier la nature du problème (python n'interprète pas l'unicode sauf indication contraire?) Et comment le résoudre correctement?
EDIT: Voici toutes les lignes proches de celle en erreur
def createLoadBalancer():
conn = ELBConnection(creds.awsAccessKey, creds.awsSecretKey)
hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")
lb = conn.create_load_balancer('my_lb', ['us-east-1a', 'us-east-1b'],[(80, 8080, 'http'), (443, 8443, 'tcp')])
lb.configure_health_check(hc)
return lb
Vous avez un octet parasite qui flotte. Vous pouvez le trouver en exécutant
with open("x.py") as fp:
for i, line in enumerate(fp):
if "\xe2" in line:
print i, repr(line)
où vous devez remplacer "x.py"
par le nom de votre programme. Vous verrez le numéro de la ligne et les lignes incriminées. Par exemple, après l'insertion arbitraire de cet octet, j'ai obtenu:
4 "\xe2 lb = conn.create_load_balancer('my_lb', ['us-east-1a', 'us-east-1b'],[(80, 8080, 'http'), (443, 8443, 'tcp')])\n"
Si vous essayez simplement d'utiliser des caractères UTF-8 ou ne vous souciez pas de les insérer dans votre code, ajoutez cette ligne en haut de votre fichier .py
.
# -*- coding: utf-8 -*-
Ou vous pouvez simplement utiliser:
# coding: utf-8
au sommet du fichier .py
Changer l'encodage des caractères du fichier,
mettre toujours sous la ligne en haut de votre code
# -*- coding: utf-8 -*-
\ xe2 est le caractère '-', il apparaît dans certains copier-coller, il utilise un '-' identique qui provoque des erreurs d'encodage . Remplacez le '-' (de copier coller) par le bon '-' ( de votre bouton du clavier).
J'ai eu la même erreur en copiant et collant un commentaire du Web
Pour moi c'était une simple citation (') dans la Parole
Je viens de l'effacer et de le retaper.
J'ai eu cette erreur pour les caractères dans mes commentaires (de copier/coller du contenu du Web dans mon éditeur pour prendre des notes).
Pour résoudre dans Text Wrangler:
Si cela aide quelqu'un, cela m'est arrivé parce que j'essayais d'exécuter une implémentation de Django en python 3.4 avec ma commande python 2.7
Après environ une demi-heure de recherche à travers le débordement de pile, il m’a semblé que si l’utilisation d’un seul guillemet "'" dans un commentaire passait par l’erreur:
SyntaxError: Non-ASCII character '\xe2' in file
Après avoir examiné l'historique, j'ai pu localiser la citation utilisée dans mon commentaire.
Basé sur PEP 0263 - Définition des codages de code source Python
Python will default to ASCII as standard encoding if no other
encoding hints are given.
To define a source code encoding, a magic comment must
be placed into the source files either as first or second
line in the file, such as:
# coding=<encoding name>
or (using formats recognized by popular editors)
#!/usr/bin/python
# -*- coding: <encoding name> -*-
or
#!/usr/bin/python
# vim: set fileencoding=<encoding name> :
Ajouter la ligne # coding = utf-8 en première ligne de votre fichier .py résoudra le problème.
Veuillez en savoir plus sur le problème et son correctif sur le lien ci-dessous. Dans cet article, le problème et sa solution sont décrits de manière élégante: https://www.python.org/dev/peps/pep-0263/
J'ai eu ce problème exact en exécutant le code simple .py ci-dessous:
import sys
print 'version is:', sys.version
Le code de DSM ci-dessus fournit les éléments suivants:
1 'print\xe2\x80\x98version est\xe2\x80\x99, sys.version'
Le problème était donc que mon éditeur de texte utilisait les citations SMART, comme l'a suggéré John Y. Après avoir modifié les paramètres de l’éditeur de texte et rouvert/sauvegardé le fichier, cela fonctionne parfaitement.
J'essaie d'analyser cet étrange apostraphe Windows et après avoir essayé plusieurs choses, voici l'extrait de code qui fonctionne.
def convert_freaking_apostrophe(self,string):
try:
issuer_rename = string.decode('windows-1252')
except:
issuer_rename = string.decode('latin-1')
issuer_rename = issuer_rename.replace(u'’', u"'")
issuer_rename = issuer_rename.encode('ascii','ignore')
try:
os.rename(directory+"/"+issuer,directory+"/"+issuer_rename)
print "Successfully renamed "+issuer+" to "+issuer_rename
return issuer_rename
except:
pass
#HANDLING FOR FUNKY APOSTRAPHE
if re.search(r"([\x90-\xff])", issuer):
issuer = self.convert_freaking_apostrophe(issuer)
Pour moi, le problème avait été causé par "’ "ce symbole dans les guillemets. Comme j'avais copié le code d'un fichier pdf, cela a causé cette erreur. Je viens de remplacer "" "par ce" "".
Si vous voulez identifier le caractère qui a causé cela, assignez simplement la variable problématique à une chaîne et imprimez-la dans une console iPython.
Dans mon cas
In [1]: array = [[24.9, 50.5], [11.2, 51.0]] # Raises an error
In [2]: string = "[[24.9, 50.5], [11.2, 51.0]]" # Manually paste the above array here
In [3]: string
Out [3]: '[[24.9, 50.5]\xe2\x80\x8b, [11.2, 51.0]]' # Here they are!
J'avais le même problème et je l'ai simplement ajouté en haut de mon fichier (en Python 3, je n'avais pas le problème mais je le fais en Python 2
#!/usr/local/bin/python
# coding: latin-1
J'ai eu le même problème, mais c'est parce que j'ai copié et collé la chaîne telle qu'elle est . Plus tard, lorsque j'ai saisi manuellement la chaîne car l'erreur a disparu.
J'ai eu l'erreur due au signe -
. Lorsque je l'ai remplacé par la saisie manuelle d'un -
, l'erreur a été résolue.
Chaîne copiée 10 + 3 * 5/(16 − 4)
Chaîne saisie manuellement 10 + 3 * 5/(16 - 4)
vous pouvez clairement voir qu'il y a un peu de différence entre les tirets.
Je pense que cela est dû au formatage différent utilisé par un système d'exploitation différent ou peut-être simplement à un logiciel différent.
pour moi, le problème était causé par la saisie de mon code dans Mac Notes, puis copié-le à partir de Mac Notes et collé dans ma session vim pour créer mon fichier. Cela rend mon single cite le type incurvé. pour résoudre ce problème, j'ai ouvert mon fichier dans vim et remplacé toutes mes guillemets simples courbes par des caractères simples, simplement en supprimant et en retapant le même caractère. C'est Mac Notes qui a fait en sorte que le même trait de touche produise la citation simple incurvée.