如何使用Python字符串,以便相同的代码在2.6、2.7、3.x中有效
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用Python字符串,以便相同的代码在2.6、2.7、3.x中有效,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1391字,纯文字阅读大概需要2分钟。
内容图文
我想编写一些简单的Python脚本,这些脚本可以在不同的Python版本上未经修改地使用,但是我遇到了字符串问题…
text = get_data()
phrases = [ "Soggarth Eogham O'Growney ,克尔?德怀尔", "capitis #3 病态上升涨大的繁殖性勃现", "IsoldeIsult、第一任威尔士亲王" ]
for item in phrases:
if item not in text: **# 3.3 ok. 2.7 UnicodeDecodeError**
print ("Expected phrase '" + item + "' not found")
上面的代码在3.3中有效.当我尝试在2.7以下运行时,我得到
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 27: ordinal not in range(128)
只需将第一行更改为
text = get_data().encode('utf-8')
但是,这在3.3上不起作用.有什么办法可以使源代码的一个版本起作用?
Python新手.
解决方法:
似乎get_data()将返回Unicode字符串.之所以会出现错误,是因为您将Unicode字符串与8位字符串连接在一起,从而强制进行了转换(默认情况下将使用ASCII编解码器进行此转换),并且由于数据包含非ASCII字符,因此将失败.
使上面的代码正常工作的最佳方法是,然后以u“”作为前缀,确保所有字符串都是Unicode:
phrases = [ u"Soggarth Eogham O'Growney ,克尔?德怀尔",
u"capitis #3 病态上升涨大的繁殖性勃现",
u"IsoldeIsult、第一任威尔士亲王" ]
但是,这仅适用于Python 2.x和Python 3.3.如果需要使用Python 3.2或3.1,则需要一种方法可以在Python 2下将其转换为Unicode,但在Python 3下却无能为力(因为它已经是Unicode).
这种函数通常称为u(),您可以这样定义它:
import sys
if sys.version < '3':
import codecs
def u(x):
return codecs.unicode_escape_decode(x)[0]
else:
def u(x):
return x
内容总结
以上是互联网集市为您收集整理的如何使用Python字符串,以便相同的代码在2.6、2.7、3.x中有效全部内容,希望文章能够帮你解决如何使用Python字符串,以便相同的代码在2.6、2.7、3.x中有效所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。