redis中bytes和str转换|使代码在python2 python3中均适用

1.查看python版本

import sys
v = sys.version

print(type(v))
print(v)
print(v[0])

3.5.6 |Anaconda, Inc.| (default, Aug 26 2018, 16:05:27) [MSC v.1900 64 bit (AMD64)]
3


2.str和bytes互相转换
bytes转为str类型

  • string=b.decode() # 第一参数默认utf8,第二参数默认strict

       print(string)

  • string=b.decode(‘utf-8’,‘ignore’) # 忽略非法字符,用strict会抛出异常

       print(string)

  • string=b.decode(‘utf-8’,‘replace’) # 用?取代非法字符

     print(string)

str 转换为 bytes类型

  • b=bytes(str1, encoding=‘utf-8’)

        print(b)

  • b=str1.encode(‘utf-8’)

        print(b)

注:str没有decode方法,如果调用str.decode会报错:
AttributeError: ‘str’ object has no attribute ‘decode’

3.从redis取数
python2中r.get()返回的是str类型,但在python3中r.get()返回的是bytes类型,如果切换环境时不做相应处理,可能会报各种错误,如 TypeError: Can’t convert ‘bytes’ object to str implicitly
解决:
如果需要得到str类型,可以通过decode方法转化为str类型。这样就增加了代码灵活性,使代码在python2和python3均适用。代码如下:

    def request_data(mds, key):
        version = sys.version_info
        line = self.r.get(key)
        if int(version[0]) == 3: # 如果是python3,则转化为字符串
            line = line.decode()
        if line is not None:
            mds.append(line)

你可能感兴趣的:(python,开发语言)