首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该在python中输入什么样的代码声明?

我应该在python中输入什么样的代码声明?
EN

Stack Overflow用户
提问于 2011-11-26 12:00:57
回答 4查看 4.4K关注 0票数 7

我从网站上了解到,当我不想输入友好的unicode字符:http://www.python.org/dev/peps/pep-0263/时,我应该在python中添加代码声明,但我仍然对此感到困惑。

假设我在linux中使用vim,然后创建一个新的py文件和输入代码,如下所示:

代码语言:javascript
复制
#!/usr/bin/python2.7
# -*- coding: utf8 -*-
s = u'ޔ'
print s

1。我试图用以下代码替换第2行:

代码语言:javascript
复制
import sys
reload(sys)
sys.setdefaultencoding('utf8')

但这不管用,不是吗?

2。我对linux不太熟悉,我真的不知道为什么要在代码删除的开头和结尾添加_*_,当我试图用# code=utf8# code: utf8替换# -*- coding: utf8 -*-时,我得到了一个错误:

代码语言:javascript
复制
File "pythontest.py", line 3
SyntaxError: Non-ASCII character '\xde' in file pythontest.py on line 3, but no encoding declared; see     http://www.python.org/peps/pep-0263.html for details

但是这些代码声明是在网站http://www.python.org/dev/peps/pep-0263/中提到的!

根据文档,允许如下代码声明:

代码语言:javascript
复制
# This Python file uses the following encoding: utf-8

哎呀,这是什么?我不认为computer.what能够在世界范围内识别它,代码应该声明吗?我感到越来越困惑。

谢谢你帮忙。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-26 12:15:22

您所链接的PEP的摘要确实说明了这一切:

这个PEP建议引入一个语法来声明源文件的编码。然后,解析器使用编码信息来使用给定的编码来解释文件。最值得注意的是,这增强了对源代码中Unicode文字的解释,并使使用例如UTF-8直接在Unicode感知编辑器中编写Unicode文字成为可能。

(重点是我的)。

即使您想要做的事情已经奏效(以编程方式替换源文件的编码),它也没有任何意义。想想看:代码是静态的(不会改变)。尝试以不同的编码方式阅读它是没有意义的:只有一个正确的编码(源的作者在其中编辑源)。

至于语法:

代码语言:javascript
复制
# This Python file uses the following encoding: utf-8

PEP本身说,这种语法是“没有解释器行,使用纯文本”。它是为人类而放置的。这样,如果您在文本编辑器中打开一个文件并发现它充满了胡言乱语,您就可以在它的菜单中手动设置源代码。

编辑:为什么要把编码放在# -*--*-之间。这纯粹是传统。第一个符号,哈希符号,告诉它是一个注释(所以它不会被编译成字节码),然后_*_只是告诉解析器特定注释是给他/她的一种方式。

这和输入你的来源没有什么不同:

代码语言:javascript
复制
# TODO: fix this nasty bug

其中,TODO:部分告诉开发人员(和一些IDE),这是一条需要操作的消息。你可以用任何你想要的,包括@MarkZarWTF!.只是个惯例!

哈哈!

票数 3
EN

Stack Overflow用户

发布于 2011-11-26 12:17:15

python编码声明的重要部分是coding: utf-8,它应该在第一行python代码之前的注释中,您可以随意处理注释的另一部分。

以下是PEP中描述这种行为的行:

更准确地说,第一行或第二行必须匹配正则表达式"coding:=\s*(-\w.+)“。然后将该表达式的第一组解释为编码名称。如果Python不知道编码,则会在编译期间引发错误。在包含编码声明的行中不能有任何Python语句。

票数 3
EN

Stack Overflow用户

发布于 2011-11-26 12:03:36

您需要这行代码,因为您需要告诉编译器源代码使用哪种编码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8278264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档