2010-09-09 83 views

回答

2

您可能希望通过使用parserdis内置模块解析Python源代码来编写一个这样的warnging-generator工具。您也可以考虑在pylint中添加这样的功能。

4

你应该前缀的所有字符串文字与 'U'

没有,真的没有。

您应该使用u前缀字符串的文字。但并不是所有的字符串都是字符串。在与基于字节的组件通信时,如网络服务或二进制文件,您需要使用字节字符串。

例如。想要尝试将Unicode字符串写入PNG文件?不明智。想要base64解码字符串Y2Fm6Q==?你不能在这里合理地使用Unicode字符串,base64是明确的字节。

当然,Python会经常让你得逞的传递unicode字符串,其中一个字节串的预期,但只能通过自动编码为ASCII。如果字符串包含非ASCII字符,您将获得UnicodeError,就像您使用的字节是unicode所期望的那样。 “Unicode是正确的,字节是错误的”是一个破坏性的神话。这两种字符串的操作都是必需的。

如果您担心过渡到Python 3,您当然应该将您的字符串标记为u'',但您还应该将显式字节字符串标记为b''。无关紧要的字符串可以保留为'',并让它们在Python 3中从字节字符串转换为unicode字符串。有很多情况下,Python 2用于使用字节,而Python 3在适当的地方使用Unicode这个。但是仍然有很多情况下你确实需要说话字节,并且将其转换为Python 3作为unicode会导致问题。

(与此唯一的问题是b''语法需要Python 2.6或更高版本,所以使用它会令你与早期版本不兼容。)

+0

采取了点,我编辑我的问题。 – 2010-09-09 10:08:36

1

KennyTM的评论应张贴作为一个答案:

from __future__ import unicode_literals 

这个未来的声明可以在Python 2.6和2.7中使用,并且支持Python 3的字符串语法,因此前缀不固定的字符串是Unicode字符串,而字节数组需要前缀b