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

文章目录

  • 1.查看python版本
  • 2.str和bytes互相转换
    • 2.1 bytes转为str类型
    • 2.2 str 转换为 bytes类型
  • 3.从redis取数
  • 附录

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互相转换

2.1 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)

2.2 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)

附录

pdb调试|PyCharm调试|PyDev调试|logging日志

你可能感兴趣的:(Python,python,redis,字符串)