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

213

我正在编写一些Python代码,但是在标题中所述的错误消息中得到了错误提示。从搜索结果来看,这与字符集有关。

这是导致错误的那一行:

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

我无法确定哪个字符不在ANSI ASCII集合中?而且搜索"\xe2"并没有提供有关显示为什么字符的更多信息。在这一行中,哪个字符引起了问题?

我也看到了一些解决此问题的方法,但我不确定要使用哪种方法。有人能澄清一下这个问题是什么(Python除非被告知如何解释Unicode,否则它不会解释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

75
请在文件顶部添加 # coding: utf-8。 - Mutant
2
你发布的内容没有问题;请查看附近的行。 - kindall
4
你尝试过Mutant的建议了吗?文件中是否有“智能引号”(弯曲和/或倾斜的那种)? - John Y
是的,突变体起作用了,同时使用记事本或其他工具将文件保存为ASCII格式,然后像往常一样使用它。 - KDecker
4
可能导致此问题的一个例子是EN破折号( - \xe2\x80\x93)。 - Martin Thoma
显示剩余3条评论
23个回答

0

我长时间无法找到问题所在,但后来意识到我从网上复制了一行“UTC-12:00”,其中的连字符导致了问题。我只需重新输入“-”即可解决问题。

因此,有时候复制粘贴的代码也会出现错误。在这种情况下,只需重新编写复制粘贴的代码即可解决问题。重新编写后,它看起来好像没有改变,但错误已经消失了。


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字符。(来源)

另一个从这个SO线程中获取的提示使用了反向字符类,包括任何不在ASCII可见范围内的内容,并对其进行了突出显示:

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

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


-3

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

f = open('file','rt', errors='ignore')

这是糟糕的建议。你应该找出正确的编码,丢弃你不认识的字符只会损坏数据。无论如何,问题是关于Python源代码中的编码,而不是输入文本文件的。 - tripleee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接