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
135
demandé sur KDecker 2014-02-08 02:55:16

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"
104
répondu DSM 2014-02-07 23:11:12

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 -*-
210
répondu Chris Redford 2015-04-07 22:18:45

Ou vous pouvez simplement utiliser:

# coding: utf-8

En haut du fichier. py

20
répondu Ysh 2017-04-27 18:02:06

Modifier l'encodage des caractères du fichier,

Mettez toujours la ligne ci-dessous en haut de votre code

# -*- coding: utf-8 -*-
18
répondu Dadaso Zanzane 2015-01-21 09:04:42

\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).

16
répondu André Liu 2017-02-21 11:41:24

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.

7
répondu khalid sookia 2015-05-19 23:23:52

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:

  1. mettez en Surbrillance le texte
  2. allez dans le menu Texte
  3. sélectionnez "Convertir en ASCII"
4
répondu Kat Russo 2014-10-17 23:00:19

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> :
2
répondu caot 2016-02-24 23:09:32

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.

2
répondu Mark Austin 2017-09-29 10:11:30

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.

1
répondu nagrom 2014-12-27 21:48:03

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)
1
répondu Chris 2016-06-18 04:49:23

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

1
répondu aless80 2018-03-17 15:11:16

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.

0
répondu Mahi 2018-01-10 11:34:15

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 "'".

0
répondu Vineet Bramhankar 2018-04-12 14:41:14

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!
0
répondu meowmeow 2018-07-21 09:54:02

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.

0
répondu double07robinhood 2018-08-20 06:10:27

Quand j'ai un problème similaire lors de la lecture de fichiers texte que j'utilise...

f = open('file','rt', errors='ignore')
-1
répondu Cam 2014-02-07 23:02:09

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.

-2
répondu Sumit 2017-07-21 09:24:15