获取没有前缀为'u'的python字符串文字的警告

时间:2010-09-09 07:38:05

标签: python unicode pydev

要跟随best practices for Unicode in python,您应该在字符的所有字符串文字前加上“u”。有没有可用的工具(最好是PyDev兼容的),如果你忘了它就会​​发出警告?

3 个答案:

答案 0 :(得分:4)

  

你应该在所有字符串文字前加上'u'

不,不是真的。

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

例如。想尝试将Unicode字符串写入PNG文件?不明智。想要对字符串Y2Fm6Q==进行base64解码吗?你不能在这里合理地使用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或更高版本,因此使用它会使您与早期版本不兼容。)

答案 1 :(得分:2)

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

答案 2 :(得分:1)

KennyTM的评论应该作为答案发布:

from __future__ import unicode_literals

这个未来声明可以在Python 2.6和2.7中使用,并启用Python 3的字符串语法,以便前缀字符串文字是Unicode字符串,字节数组需要b前缀。