如果我尝试在文件顶部使用#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。
答案 0 :(得分:8)
您从问题中省略了一些内容:您正在使用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
个字符串)。