SyntaxError: Non-ASCII character 'xa3' in file when function returns '£'
假设我有一个功能:
1 2
| def NewFunction():
return '£' |
我想打印一些前面有磅符号的东西,当我尝试运行此程序时,它会打印一个错误,显示此错误消息:
1 2
| SyntaxError: Non-ASCII character '\xa3' in file 'blah' but no encoding declared;
see http://www.python.org/peps/pep-0263.html for details |
有人能告诉我如何在返回函数中包含一个磅符号吗?我基本上是在一个类中使用它,它在'__str__'部分中包含了磅符号。
- 你读过你所联系的政治公众人物吗?它描述了问题是什么以及如何解决问题。
- Python版本?
- "有人能告诉我如何在返回函数中包含一个pound符号吗?"错误消息说"有关详细信息,请参阅python.org/peps/pep-0263.html";也许您应该从那里开始?
- @Easternmonk链接对我仍然有效。
- @Murgatroid99这是你和当时我键入的这27个其他的失踪:是的,当然我会读政治公众人物。难度等级:我试着在码头集装箱上运行/bin/sh。我不是在公开地尝试运行python。所以所有的PEP都会告诉我如何修复我不想运行和不写的python代码。我希望从StackOverflow中得到更多的上下文,而不是沾沾自喜。:(进一步搜索找到了实际答案:stackoverflow.com/questions/38992850/…—请注意,PEP是如何精确为零来提供帮助的。
- @markallen-在链接的答案中,错误消息表明python正在尝试解释"/bin/bash"-这显然是很容易忽略的事情,但这个问题中没有任何内容表明它与Docker或容器有关,因此您在这里发现的建议不适用于您的问题-这不是自满,只是有内容xt在你的问题上,这里不存在。
- @坦尼斯,我支持我说的话。我得到了问题中的错误。而不是向人们提供有用的信息,这是会见,"你甚至读了你联系的政治公众人物?"然后,"错误消息说,看(blah),prehaps你应该从那里开始?"<--这些回答没有帮助。我不知道我们为什么要讨论这个问题。
- @murgatroid99 stackoverflow用于查找答案,Q&A样式。人们想问谷歌问题,然后直接找到答案。以这种方式找到答案比阅读文档页面要快得多,文档页面通常设计得不适合人类阅读。在这里提问是很好的,即使答案可以在其他地方找到。你可以找到另一个地方"如何离开维姆?"或者"如何在Python2.7中打印",但是为什么要这样做?
我建议你读一下错误给你的PEP。问题是代码试图使用ASCII编码,但磅符号不是ASCII字符。尝试使用UTF-8编码。您可以从将# -*- coding: utf-8 -*-放在.py文件的顶部开始。为了更高级,您还可以在代码中逐个字符串定义编码。但是,如果您试图将磅符号文字输入到代码中,则需要对整个文件使用支持它的编码。
- 型谢谢您。忘了自己动手。但是,在我的例子中,用UTF-8编码而不使用BOM更好。
- 型谢谢!!!经过两个小时的搜索,终于成功了。非常感谢
在.py脚本顶部添加以下两行对我有效(第一行是必需的):
1 2
| #!/usr/bin/env python
# -*- coding: utf-8 -*- |
- 型谢谢。这太奇怪了,因为我以前从来没有这样做过。我觉得Mac的编码设置有问题。我在广播中没有这个问题,但我的新职业选手有这个问题。
- 型我有同样的问题,我的python是2.7.11。在文件顶部添加第二行# -*- coding: utf-8 -*-后,解决了问题。
- 型第一行是什么?只是想知道…
- 型这就解决了上述大部分问题,尤其是从在线IDE(如C9)中看到的问题。
- 型第一行是使py文件在*nix上可执行。这与这个问题没有真正的关系。
- 型附加的第一行像是魅力。
首先将# -*- coding: utf-8 -*-行添加到文件的开头,然后对所有非ASCII Unicode数据使用u'foo':
1 2
| def NewFunction():
return u'£' |
或者使用自python 2.6以来可用的魔法使其自动:
1
| from __future__ import unicode_literals |
- 型如果您有# -*- coding: utf-8 -*-,则不需要在unicode字符串前面加上u前缀。
- 型+1谢谢!你是我问题的答案。
- 型谢谢你为我节省了这么多时间!
- 型@如果它在变量上呢?读取文件的示例?我不能用uvariable,怎么用?
- 型@丹妮尔,但这不是真的。# -*- coding: utf-8 -*-后接print 'b??d'输出垃圾,print u'b??d'工作。
- 型@丹妮尔,普兹梅克·D说的话。像这样将UTF-8文本放入源代码通常不是一个好主意,并且可能导致不必要的行为,特别是在Python2中。如果文本不是纯粹的7位ASCII,那么它们应该是实际的Unicode,而不是UTF-8,所以在Python2中,您应该在这些文本上加上u前缀。在python 3中,普通字符串无论如何都是Unicode的,但是在最近的python3版本中允许使用u前缀,以使编写在python 2&3中行为正确的代码更加容易。
错误消息确切地告诉您出了什么问题。Python解释器需要知道非ASCII字符的编码。
如果你想退回U+00A3,你可以说
它通过Unicode转义序列以纯ASCII表示此字符。如果要返回包含文字字节0xA3的字节字符串,则
(在python 2中,b是隐式的;但是显式优于隐式的)。
错误消息中链接的PEP将指导您如何准确地告诉python"这个文件不是纯ASCII;这里是我使用的编码"。如果编码是utf-8,那就是
或Emacs兼容
1
| # -*- encoding: utf-8 -*- |
如果您不知道编辑器使用哪种编码来保存此文件,可以使用十六进制编辑器和一些谷歌搜索来检查它。堆栈溢出字符编码标记有一个标记信息页,其中包含更多信息和一些疑难解答提示。
换句话说,在7位ASCII范围(0x00-0x7f)之外,python不能也不能猜测字节序列代表的字符串。https://triplee.github.io/8bit a3显示了21个字节0xa3的可能解释,这仅来自传统的8位编码;但它也很可能是多字节编码的第一个字节。但事实上,我猜你实际上使用的是拉丁语-1,所以你应该
作为源文件的第一行或第二行。不管怎样,如果不知道字节应该代表哪一个字符,人类也无法猜测这一点。
- 型这是我先前回答的一个重复问题的改编:stackoverflow.com/a/50829958/874188
- 型对于源文件,python 3默认为utf-8,现在您可能应该对所有内容都使用utf-8。utf8无处不在.org