Python "SyntaxError: caractère Non-ASCII' xe2 ' dans le fichier"
J'écris du code python et je reçois le message d'erreur comme dans le titre, de la recherche cela a à voir avec le jeu de caractères.
Voici la ligne qui provoque l'erreur
hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")
Je ne peux pas comprendre quel caractère n'est pas dans L'ensemble ASCII ANSI? De plus, la recherche "xe2 " ne donne plus d'informations sur le caractère qui apparaît. Quel caractère dans cette ligne est à l'origine du problème?
J'ai aussi vu quelques corrections pour ce problème mais je suis vous ne savez pas lequel utiliser. Quelqu'un pourrait-il clarifier Quel est le problème (python n'interprète pas unicode sauf si on lui dit de le faire?), et comment je pourrais clarifier les choses correctement?
Modifier: Voici toutes les lignes près de celle qui fait des erreurs
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
18 réponses
Vous avez un octet errant flottant autour. 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 ligne et la ou les lignes incriminées. Par exemple, après avoir inséré cet octet arbitrairement, 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 si vous vous en fichez, Ajoutez cette ligne en haut de votre fichier .py
# -*- coding: utf-8 -*-
Ou vous pouvez simplement utiliser:
# coding: utf-8
En haut du fichier. py
Modifier l'encodage des caractères du fichier,
Mettez toujours la ligne ci-dessous en haut de votre code
# -*- coding: utf-8 -*-
\xe2 est le caractère' -', il apparaît dans certains copier-coller, il utilise un ' - ' différent qui provoque des erreurs d'encodage. Remplacez le ' - '(de copier coller) par le bon ' - '(à partir du bouton du clavier).
J'ai eu la même erreur lors de la copie et du collage d'un commentaire sur le web
Pour moi, c'était une seule citation ( ' ) dans le mot
Je viens de l'effacer et de le re-taper.
J'ai eu cette erreur pour les caractères dans mes commentaires (de copier / coller du contenu du web dans mon éditeur à des fins de prise de notes).
Pour résoudre dans le Texte Wrangler:
- mettez en Surbrillance le texte
- allez dans le menu Texte
- sélectionnez "Convertir en ASCII"
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> :
Après environ une demi-heure de recherche à travers le débordement de pile, il m'est apparu que si l'utilisation d'une seule citation "'" dans un commentaire sera par l'erreur:
SyntaxError: Non-ASCII character '\xe2' in file
Après avoir regardé le retraçage, j'ai pu localiser la citation unique utilisée dans mon commentaire.
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 ce qui suit:
1 ' imprimer \xe2\x80 \ x98version est\xe2\x80\x99, sys.la version'
Donc, le problème était que mon éditeur de texte utilisait des citations intelligentes, comme John Y l'a suggéré. Après avoir modifié les paramètres de l'éditeur de texte et rouvrir / enregistrer le fichier, cela fonctionne très bien.
J'essaie d'analyser cet apostraphe Windows bizarre 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)
Si cela aide quelqu'un, pour moi c'est arrivé parce que j'essayais d'exécuter une implémentation Django en Python 3.4 avec ma commande python 2.7
J'ai eu le MÊME PROBLÈME MAIS c'est parce que j'ai copié et collé la chaîne telle quelle. Plus tard, quand j'ai tapé manuellement la chaîne car c'est l'erreur qui 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ésolu.
Chaîne copiée 10 + 3 * 5/(16 − 4)
Chaîne tapée manuellement 10 + 3 * 5/(16 - 4)
Vous pouvez clairement voir qu'il y a un peu de différence entre les deux tirets .
Je pense que c'est à cause de la différence formatage utilisé par différents OS ou peut-être juste différents logiciels.
Pour moi, le problème avait causé en raison de " ’ " ce symbole dans les guillemets. Comme j'avais copié le code à partir d'un fichier pdf, cela a causé cette erreur. Je viens de remplacer " ’ " par ce "'".
Si vous voulez repérer quel caractère 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!
Pour moi, le problème a été causé en tapant mon code dans Mac Notes, puis copié à partir de Mac Notes et collé dans ma session vim pour créer mon fichier. Cela a fait de mes guillemets simples le type incurvé. pour le réparer, j'ai ouvert mon fichier dans vim et remplacé tous mes guillemets simples courbes par le type droit, juste en supprimant et en retapant le même caractère. Ce sont les Notes Mac qui ont fait le même coup de clé produire la citation unique incurvée.
Quand j'ai un problème similaire lors de la lecture de fichiers texte que j'utilise...
f = open('file','rt', errors='ignore')
J'ai eu cette même solution de problème est simple. si vous avez copié quelque chose à partir du web, s'il y a des symboles comme ( " , -,'), remplacez-les par des touches du clavier. problème à résoudre.