如果我尝试在文件顶部使用像 #coding=utf-8 这样的魔术注释,会发生以下情况:
Traceback (most recent call last):
File <string>, line 0
SyntaxError: encoding declaration in Unicode string
我真的没有做错任何事。这是代码:
#coding=utf-8
string = raw_input()
chars = {}
for i in string:
if i in chars:
chars[i] += 1
else:
chars[i] = 0
print chars
我使用 repl.it。
请您参考如下方法:
你从你的问题中遗漏了一些东西:你正在使用 exec 来执行这段代码。并且您将 Unicode 对象 传递给了 exec,这意味着您已经声明源是 Unicode 文本:
>>> code = '''\
... # coding=utf8
... print 'hello world!'
... '''
>>> exec code
hello world!
>>> exec code.decode('utf8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 0
SyntaxError: encoding declaration in Unicode string
您不能在传递给 exec 的 Unicode 文本中使用 PEP 263 声明。
如果您使用的是“自定义”环境,例如 repl.it , 然后是的,这样的环境总是使用像 exec 这样的技巧来执行代码,并且它们从您的浏览器加载源代码作为 Unicode。查看actual code used ,它将 JSON 源字符串传递给 exec(其中此类字符串始终为 unicode 字符串)。
