Python“SyntaxError:文件中的非ASCII字符'\ xe2'”

时间:2014-02-07 22:55:16

标签: python

我正在编写一些python代码,我收到了标题中的错误消息,从搜索这与字符集有关。

以下是导致错误的行

hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")

我无法弄清楚ANSI ASCII集中没有哪个字符?此外,搜索“\ xe2”不再提供有关出现的字符的信息。该行中的哪个字符导致问题?

我也看到了一些针对这个问题的修复,但我不确定要使用哪个。有人可以澄清问题是什么(python不解释unicode,除非被告知这样做?),以及我如何正确地解决它?

编辑: 以下是错误

附近的所有行
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

23 个答案:

答案 0 :(得分:235)

如果您只是尝试使用UTF-8字符或不关心它们是否在您的代码中,请将此行添加到.py文件的顶部

# -*- coding: utf-8 -*-

答案 1 :(得分:122)

你有一个漂浮的杂散字节。您可以通过运行

找到它
with open("x.py") as fp:
    for i, line in enumerate(fp):
        if "\xe2" in line:
            print i, repr(line)

您应该用您的程序名称替换"x.py"。您将看到行号和违规行。例如,在任意插入该字节后,我得到了:

4 "\xe2        lb = conn.create_load_balancer('my_lb', ['us-east-1a', 'us-east-1b'],[(80, 8080, 'http'), (443, 8443, 'tcp')])\n"

答案 2 :(得分:30)

或者你可以简单地使用:

# coding: utf-8

位于.py文件的顶部

答案 3 :(得分:20)

更改文件字符编码

始终将代码放在首位

# -*- coding: utf-8 -*-

答案 4 :(得分:19)

\ xe2是' - '字符,它出现在一些复制和粘贴它使用不同的相同的看' - '这会导致编码错误。 将' - '(来自复制粘贴)替换为正确的' - ' (从你的键盘按钮)。

答案 5 :(得分:10)

我在从网络上复制和粘贴评论时遇到了同样的错误

对我来说,这是单词

中的单引号(')

我刚删除它并重新输入它。

答案 6 :(得分:4)

我的评论中的字符出现了此错误(从将内容复制/粘贴到我的编辑器中以便记笔记)。

要在Text Wrangler中解决:

  1. 突出显示文字
  2. 转到“文本”菜单
  3. 选择“转换为ASCII”

答案 7 :(得分:2)

基于PEP 0263 -- Defining Python Source Code Encodings

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> :

答案 8 :(得分:2)

我的情况\ xe2是一个,应替换为'

通常,我建议使用以下命令将UTF-8转换为ASCII: https://onlineasciitools.com/convert-utf8-to-ascii

但是,如果您想保留UTF-8,可以使用

#-*- mode: python -*-
# -*- coding: utf-8 -*-

答案 9 :(得分:2)

经过大约半小时的翻看堆栈溢出后,我突然意识到如果使用单引号&#34; &#39; &#34;在评论中将通过错误:

SyntaxError: Non-ASCII character '\xe2' in file

在查看回溯之后,我能够找到评论中使用的单引号。

答案 10 :(得分:2)

在.py文件的第一行中添加#coding = utf-8 行将解决此问题。

请在下面的链接中详细了解该问题及其修复方法,本文对问题及其解决方案进行了详细描述:https://www.python.org/dev/peps/pep-0263/

答案 11 :(得分:2)

如果它对任何人都有帮助,对我而言,因为我试图用我的python 2.7命令在python 3.4中运行Django实现

答案 12 :(得分:1)

我遇到了这个问题,运行下面的简单.py代码:

import sys
print 'version is:', sys.version

DSM上面的代码提供了以下内容:

1&#39; print \ xe2 \ x80 \ x98version是\ xe2 \ x80 \ x99,sys.version&#39;

所以问题是我的文本编辑器使用了SMART QUOTES,就像John Y所说的那样。更改文本编辑器设置并重新打开/保存文件后,它可以正常工作。

答案 13 :(得分:1)

我正在尝试解析那些奇怪的Windows抄袭,在尝试了几件事后,这段代码片段就可以了。

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)

答案 14 :(得分:0)

我有同样的问题但是因为我复制并粘贴了字符串。 后来当我手动输入字符串时,错误就消失了。

由于-符号,我收到了错误消息。当我用手动输入-替换它时,错误就解决了。

复制字符串10 + 3 * 5/(16 − 4)

手动输入字符串10 + 3 * 5/(16 - 4)

您可以清楚地看到连字符之间存在一些差异。

我认为这是因为不同操作系统使用的格式不同,或者只是不同的软件。

答案 15 :(得分:0)

对我而言,问题是由于引号中的“'”符号引起的。由于我从pdf文件中复制了代码,因此导致了该错误。我只是用这个“'”替换了“'”。

答案 16 :(得分:0)

如果您想找出是什么原因引起的,只需将有问题的变量分配给字符串,然后在iPython控制台中将其打印出来。

就我而言

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!

答案 17 :(得分:0)

对我来说,问题是由在Mac Notes中键入代码,然后从Mac Notes复制代码并粘贴到我的vim会话中创建的文件引起的。这使我的单引号成为弯曲类型。为了解决这个问题,我在vim中打开了我的文件,并通过删除并重新键入相同的字符,将所有弯曲的单引号替换为直线型。正是Mac Notes使相同的按键产生了弯曲的单引号。

答案 18 :(得分:0)

我遇到了同样的问题,只是将此问题添加到了文件的顶部(在Python 3中我没有问题,但在Python 2中有问题

#!/usr/local/bin/python
# coding: latin-1

答案 19 :(得分:0)

很长时间以来我一直找不到问题所在,但是后来我意识到我已经从Web复制了一行“ UTC-12:00”,并且连字符/破折号引起了问题。我只是再次写了这个“-”,问题就解决了。

因此,有时复制粘贴的行也会产生错误。在这种情况下,只需重写复制粘贴的代码即可。重写后,看起来什么都没有改变,但是错误消失了。

答案 20 :(得分:0)

这里有很多好的解决方案。

其中一个未真正解决的挑战是如何在视觉上识别某些难以发现的类似于其他普通ASCII字符的非ASCII字符。例如,取决于文本编辑器的字体,破折号几乎可以像连字符一样出现,而卷曲的引号看起来很像直引号。

这种单行代码(应在Mac或Linux上运行)将去除不在ASCII可打印范围内的字符,并并排显示差异:

# assumes Bash shell; for Bourne shell (sh), rearrange as a pipe and
# give '-' as second argument to 'sdiff' instead
sdiff --suppress-common-lines script.py <(tr -cd '\11\12\15\40-\176' <script.py)

字符\11\12\15以八进制分别为制表符,换行符和回车符。其余范围是可见的ASCII字符。 (hat tip

this SO thread中收集的另一个技巧使用了一个反字符类,该类由在ASCII可见范围内的所有 not 组成,并突出显示:

grep --color '[^ -~]' script.py

这对于grep的macOS / BSD版本也应该可以正常工作。

答案 21 :(得分:0)

我使用pycharm修复了这个问题。在pycharm的底部,您可以看到文件编码。我注意到它是UT-8。我将其更改为US-ASCII pycharm encoding depiction

答案 22 :(得分:-1)

当我在阅读文本文件时遇到类似问题时,我会使用...

f = open('file','rt', errors='ignore')
相关问题