【问题标题】:SyntaxError: encoding declaration in Unicode stringSyntaxError:Unicode 字符串中的编码声明
【发布时间】:2016-08-25 10:05:48
【问题描述】:

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

【问题讨论】:

  • 它是encoding,而不是coding
  • @DeepSpace 见here。当然可以是coding
  • @DeepSpace:不,不是。它可能是decoding,或flubcoding,或只是coding。使用的正则表达式不在乎。见What's the difference between 'coding=utf8' and '-*- coding: utf-8 -*-'?
  • @MartijnPieters 谢谢,很高兴知道!
  • 您是否使用 exec 来运行它?否则错误消息将没有意义。

标签: python unicode encoding


【解决方案1】:

您从问题中遗漏了一些内容:您正在使用 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 字符串)。

【讨论】:

  • 我认为解释器使用exec。提前致谢! +1
  • @ΈρικΚωνσταντόπουλος:确实如此,在从 JSON 加载的 Unicode 字符串上;阅读sys.argv[0]时,实际脚本很容易获得。
  • @ΈρικΚωνσταντόπουλος:我不是故意暗示你没有,对不起。
猜你喜欢
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
相关资源
最近更新 更多