SyntaxError:Unicode字符串中的编码声明

时间:2016-08-25 10:05:49

标签: python unicode encoding

如果我尝试在文件顶部使用#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。

1 个答案:

答案 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个字符串)。