错误消息会告诉您确切的问题。Python解释器需要知道非ASCII字符的编码。
如果要返回U + 00A3,则可以说
return u'\u00a3'
它通过Unicode转义序列以纯ASCII形式表示此字符。如果要返回包含文字字节0xA3的字节字符串,则为
return b'\xa3'
(在Python 2中b
是隐式的;但是显式的比隐式的要好)。
错误消息中链接的PEP指示您确切如何告诉Python“此文件不是纯ASCII;这是我正在使用的编码”。如果编码为UTF-8,则应为
# coding=utf-8
或与Emacs兼容
# -*- encoding: utf-8 -*-
如果您不知道编辑器使用哪种编码来保存此文件,请使用十六进制编辑器和某种谷歌搜索来检查它。堆栈溢出字符编码标签有一个标签信息页面,其中包含更多信息和一些故障排除提示。
用这么多的词来说,超出7位ASCII范围(0x00-0x7F)的地方,Python不能也不应该猜测字节序列代表什么字符串。https://tripleee.github.io/8bit#a3显示了字节0xA3的21种可能的解释,而这仅来自传统的8位编码;但也可能是多字节编码的第一个字节。但实际上,我想您实际上正在使用Latin-1,因此您应该
# coding: latin-1
作为源文件的第一行或第二行。无论如何,在不知道字节应该代表哪个字符的情况下,人类也将无法猜测。
警告:coding: latin-1
肯定会消除错误消息(因为没有字节序列在技术上不允许在此编码中使用),但是如果实际编码是其他内容,则在解释代码时可能会产生完全错误的结果。声明编码时,您确实必须完全确定地知道文件的编码。